2015-09-12 62 views
-2

所以我的程序需要基類Media將成員設置爲私有以及構造函數。我無法讓他們受到保護或公開,謝謝。(C++)從私有基類訪問私有成員變量

class Media 
{ 
public: 
    friend ostream &operator<<(ostream &output, const Media &Media) 
    { 
     output << Media.mId << " " << Media.mTitle << " " << Media.mYear << " " 
       << Media.mRatings; 
     return output; 
    } 
    Media(int id, string title, int year, int ratings); 
//void printRating(); 
    friend class Movie; 
private: 

    int mId, mYear, mRatings; 
    string mTitle; 
}; 
Media::Media(int id, string title, int year, int ratings) 
{ 
    mId = id; 
    mTitle = title; 
    mYear = year; 
    mRatings = ratings; 
} 
class Movie: public Media 
{ 
public: 
    Movie(int id, string title, int year, string director); 
    string mDirector; 
}; 
Movie::Movie(int id, string title, int year, string director) : 
     mId(id), mTitle(title), mYear(year), mDirector(director) 
{ 
} 

int main() 
{ 

    Media *ptr[10]; 
    ptr[0] = new Movie(352, "Fight Club", 1999, "David Fincher"); 
//cout << *ptr[0]<<endl; 
} 
+0

你似乎忘了問一個問題。 –

回答

0

基類成員不能在initializer lists使用:

在一類的一個構造的定義中,成員初始化列表指定了直接和虛擬基礎子對象和非靜態數據成員的初始值設定。

但是你可以調用基類的構造函數:

Movie::Movie(int id, string title, int year, string director) : 
    Media(id, title, year, 0), // 0 or or whatever default rating value should be 
    mDirector(director) 
{ 
}