簡體   English   中英

多態性和受保護的繼承問題

[英]polymorphism and protected inheritance issue

我有這段代碼,並且在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;
} 

錯誤消息說明了一切:

無法將'asp_table'強制轉換為其受保護的基類'table'

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM