2012-05-06 26 views
49

Tại sao mã follwing tạo lỗi này mặc dù c là cấu trúc và có thừa kế công khai theo mặc định?chuyển đổi từ nguồn gốc * thành cơ sở * tồn tại nhưng không thể truy cập được

struct c 
{ 
protected: 
    int i; 
public: 
    c(int ii=0):i(ii){} 
    virtual c *fun(); 
}; 

c* c::fun(){ 
    cout<<"in c"; 
    return &c(); 
} 

class d : c 
{ 
public: 
    d(){} 
    d* fun() 
    { 
     i = 9; 
     cout<<"in d"<<'\t'<<i; 
     return &d(); 
    } 
}; 


int main() 
{ 
    c *cc; 
    d dd; 
    cc = &dd; 
    cc->fun(); 
} 

Trả lời

100

Bạn cần:

class d : public c 

class thừa kế là private theo mặc định.

Khi bạn được kế thừa một cách riêng tư từ một số class hoặc struct, bạn có thể nói rõ ràng rằng chuyển đổi trực tiếp từ loại có nguồn gốc sang loại cơ sở là không thể.

Các vấn đề liên quan