2013-11-21 48 views
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; 
} 

這只是第一塊,但它已經由點失敗。

歡迎任何輸入。並且,再次感謝你。

回答

2

你必須告訴C++使用哪一個構造函數,否則將默認使用默認的構造函數:

inline Classic::Classic(char * s0, char * s1, char * s2, int n, double x) : 
    Cd(s1,s2,n,x) 
{ 
    std::strncpy(primaryWork, s0, 49); 
} 

應該做你想要什麼

+0

感謝您的答覆。我在代碼中加入了這些內容,因爲我害怕,它仍然不起作用。我很確定我在某個時候嘗試過。我想我有更深層次的問題,可能是Visual Studio程序或驅動程序或其他我不瞭解的東西。不過,謝謝。它幫助我縮小問題範圍。 – TooManyHobbies

+0

我把一個endl放在函數調用上方的cout的末尾,這個函數調用正在打印出類的成員,並以某種方式修復了它。再次感謝MadScienceDreams。 – TooManyHobbies

相關問題