Надо переделать прогу в первом сообщении под использование динамических массивов. Вот:
| Код | #include "stdafx.h" #include <iostream>
class Cd { private: char * performers; char * label; int selections; // кол-во сборников double playtime; // время воспроизведения в минутах public: Cd(char * s1, char * s2, int n, double x); Cd(const Cd & d); Cd(); virtual ~Cd(); virtual void Report() const ; // отображает все данные диска Cd & operator=(const Cd & d); };
class Classic : public Cd { private: char * veduchii; // дополнительная строка public: Classic(char * vedu, char * s1, char * s2, int n, double x); Classic(const Classic & b); Classic(); virtual ~Classic(); virtual void Report() const; Classic & operator=(const Classic & d); };
Cd::Cd(char * s1, char * s2, int n, double x) { performers = new char [strlen(s1) + 1]; strcpy(performers, s1); label = new char [strlen(s2) + 1]; strcpy(label, s2); selections = n; playtime = x; } Cd::Cd(const Cd & d) { this->selections = d.selections; this->playtime = d.playtime; performers = new char [strlen(d.performers) + 1]; strcpy(performers, d.performers); label = new char [strlen(d.label) + 1]; strcpy(label, d.label); } Cd::Cd() { performers = new char [1]; label = new char [1]; } Cd::~Cd() { delete [] performers; delete [] label; } void Cd::Report() const { std::cout << "Performers: " << performers << std::endl; std::cout << "Label: " << label << std::endl; std::cout << "Selections: " << selections << std::endl; std::cout << "Playtime: " << playtime << std::endl; } Cd & Cd::operator=(const Cd & d) { if (this == & d) return *this; else { delete [] performers; delete [] label; this->selections = d.selections; this->playtime = d.playtime; strcpy(performers, d.performers); strcpy(label, d.label); return *this; } } // реализация производного класса Classic::Classic(char * vedu, char * s1, char * s2, int n, double x) : Cd(s1, s2, n, x) { veduchii = new char [strlen(vedu) + 1]; strcpy(veduchii, vedu); } Classic::Classic(const Classic & b) : Cd(b) { veduchii = new char [strlen(b.veduchii) + 1]; strcpy(veduchii, b.veduchii); } Classic::Classic() : Cd() { veduchii = new char [1]; } Classic::~Classic() { delete [] veduchii; } void Classic::Report() const { Cd::Report(); std::cout << "Veduchii: " << veduchii << std::endl; } Classic & Classic::operator=(const Classic & d) { veduchii = new char [strlen(d.veduchii) + 1]; strcpy(veduchii, d.veduchii); Cd::operator=(d); return *this; }
void Bravo(const Cd & disk); using namespace std; int main() { Cd c1("Beatles", "Capitol", 14, 35.5); Classic c2 = Classic("Piano Sonata in B flat, Fantasia in C", "alfred Brendel", "Philips", 2, 57.17); cout << "Testing assignment: " << endl; Classic copy; copy = c2; cout << endl; copy.Report();
return 0; }
void Bravo(const Cd & disk) { disk.Report(); }
|
Появляется ошибка исполнения.Может я где-то дважды delete или еще что сделал? |