0
感謝任何閱讀此內容的人。我想,繼承的類構造函數不起作用。調用變量時調用的數據不正確
當我調用函數(報表)打印出子類的所有成員時,這些字段要麼回來奇怪的字符,正確的數據然後奇怪的字符,有時0非char變量。
這個的目的是爲了證明我可以做一個正常的繼承類。
我想我可能只是沒有正確地做一些事情,因爲我是編程新手。儘量不要臉太燙。 :)
這是我有:
//類
// base class
class Cd
{
private:
protected:
char performers[50];
char label[60];
int selections;
double playtime;
public:
Cd(char * s1, char * s2, int n, double x);
Cd(const Cd & d);
Cd();
~Cd();
void Report() const; // reports all CD data
Cd & operator=(const Cd & d);
};
class Classic : public Cd // Sub-class
{
public:
Classic();
Classic(char * s0, char * s1, char * s2, int n, double x);
~Classic();
Classic & operator=(const Classic & c);
void Report() const;
private:
char primaryWork[50];
};
//方法
inline Cd::Cd(char * s1,char * s2, int n, double x) // base class constructor
{
std::strncpy(performers, s1, 49);
std::strncpy(label, s2, 59);
selections = n;
playtime = x;
}
inline Classic::Classic(char * s0, char * s1, char * s2, int n, double x)
{
std::strncpy(performers, s1, 41);
std::strncpy(label, s2, 59);
selections = n;
playtime = x;
std::strncpy(primaryWork, s0, 49);
}
順便說一句,我知道這很難貌似我沒有重用任何代碼任何。這是我最接近它的工作。我也試過(以及其他變化):
Classic(char * s0, const Cd & c); // constructor declaration
inline Classic::Classic(char * s0, const Cd & c) : Cd(c) // constructor definition
{
std::strncpy(primaryWork, s0, 49);
}
但我得到了「沒有重載函數有5個參數 不管怎麼說,這是最主要的()代碼:
Classic c2("Piano Sonata in B flat, Fantasia in C",
"698 C++ PRIMER PLUS, FIFTH EDITION Alfred Brendel", "Philips", 2, 57.17);
c2.Report();
報告函數的定義。
inline void Classic::Report() const
{
cout << endl << "Performers: " << performers << endl;
cout << "Label: " << label << endl;
cout << "Number of Selections: " << selections << endl;
cout << "Playtime: " << playtime << endl;
cout << "Primary Work: " << primaryWork << endl;
}
這只是第一塊,但它已經由點失敗。
歡迎任何輸入。並且,再次感謝你。
感謝您的答覆。我在代碼中加入了這些內容,因爲我害怕,它仍然不起作用。我很確定我在某個時候嘗試過。我想我有更深層次的問題,可能是Visual Studio程序或驅動程序或其他我不瞭解的東西。不過,謝謝。它幫助我縮小問題範圍。 – TooManyHobbies
我把一個endl放在函數調用上方的cout的末尾,這個函數調用正在打印出類的成員,並以某種方式修復了它。再次感謝MadScienceDreams。 – TooManyHobbies