多态性和受保护的继承问题

时间:2016-03-05 12:10:31

标签: c++ oop pointers c++11

我有这个代码,并且在行中 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;
} 

1 个答案:

答案 0 :(得分:0)

错误消息说明了一切:

  

无法施放&#39; asp_table&#39;到其受保护的基类&#39;表&#39;

protected继承仅表示asp_table,其派生类知道继承。因此,在类或其派生类之外不可能tp = new asp_table