2016-03-05 87 views
0

我有這個代碼,並在行 tp = new asp_table,它不會讓我編譯說我沒有訪問權限。 我不明白爲什麼?我試圖做一個從基類到派生類的指針,但它不會讓我。我想明白爲什麼。多態性和受保護的繼承問題

class table {  
    int size;  
    int priority; 

    public:  
    table(int s=0,int p=0):size(s),priority(p){ } 
    virtual void print(){} 
}; 

class stud_table:public table { 
    char * name; 
    int gr; 

    public: 
    void print() {cout<<"students table"<<endl;} 
    ~stud_table() {delete []name;} 
}; 

class asp_table:protected table { 
    char* thesis; 
}; 

int main() { 
    stud_table st; 
    table * tp = &st; 
    tp = new asp_table; 
    stud_table * stp = &st; 
    cout<<"Program"<<endl;  
    return 0; 
} 
+0

訪問什麼?請將完整的錯誤消息添加到您的問題。 – emlai

+0

錯誤:不允許轉換爲不可訪問的基類「表」。 – Timur

回答

0

錯誤消息說,這一切:

cannot cast 'asp_table' to its protected base class 'table'

protected繼承只意味着asp_table及其派生類知道繼承。因此tp = new asp_table在類或其派生類之外是不可能的。

+0

非常感謝您的評論:(但我仍然不明白...所以基本上我不能使用多態,當派生類繼承保護? – Timur

+0

是的,不在類或它的派生類之外,這就是保護繼承的意思。看來你想使用公有繼承。 – emlai