【问题标题】:Why can't base type pointer take derived class object's adress value?为什么基类型指针不能取派生类对象的地址值?
【发布时间】:2016-09-18 15:40:39
【问题描述】:
class A{
fct1(){}; 
};

class B:public A{
fct2(){};  
};
// B b; 
// A* a = &b; good! possible!!

class A{
fct1(){}; 
};
class B:protected A{
fct2(){};  
};
//B b;
// A* a=&b; error!

这是为什么呢?

受保护的继承与指针有什么关系?

我了解到受保护的继承将公共区域更改为受保护区域,因此只有派生类才能访问其成员函数和变量。 :(

请说明原理及原因。

【问题讨论】:

    标签: c++ pointers inheritance protected


    【解决方案1】:

    访问控制的全部意义在于...控制谁可以访问类的哪些部分。 “受保护”意味着只有派生类可以访问。

    基类的访问级别决定了对基子对象的访问。综上所述,这意味着只有派生类才能访问受保护的基础子对象。因此,在派生自A 的类之外,不允许将&b 转换为指向A 的指针。

    【讨论】:

    • 那我不能用受保护的继承来构建多态性?
    • 子对象在类中是否意味着类似 fct1 的东西?我用韩语学习了 C++ :P
    • “多态性”是一个危险的模糊词。通常,“动态多态”(或“虚函数多态”)是指public继承。在这种对多态性的解释中,您希望将B 视为 它是A,因此基础子对象必须是公共的。
    猜你喜欢
    • 2014-06-16
    • 2012-03-14
    • 2021-07-02
    • 1970-01-01
    • 2011-06-23
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    相关资源
    最近更新 更多