为什么基类型指针不能获取派生类对象的地址值?
Why can't base type pointer take derived class object's adress value?
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!
为什么?
受保护的继承与指针有什么关系?
我了解到受保护的继承将公共区域更改为受保护区域,因此只有派生类才能访问其成员函数和变量。 :(
请解释原理和原因。
访问控制的全部意义在于...控制谁可以访问类的哪些部分。 "受保护"表示只有派生类才具有访问权限。
基类上的访问级别决定了对基子对象的访问。综上所述,这意味着只有派生类才能访问受保护的基子对象。因此,不允许在派生自A
的类之外将&b
转换为指向A
的指针。
相关文章:
- 空基优化子对象的地址
- 对象地址是否保证是其类型对齐的倍数
- 更改保留指向其字段的原始指针的对象地址
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 为什么存储对象地址在缓冲区中会导致内存泄漏并删除它们
- 尝试将派生类对象地址分配给基类指针的向量
- 如果类型相同,对象地址必须不同,但如果类型不同,地址可以相同
- 使用对象地址以及方法地址和签名调用C 成员函数
- 将派生的对象地址分配给基础指针和调用击路仪的机制
- 为什么写入临时字符串流对象只打印对象地址
- 依赖静态对象地址安全吗
- 获取引用指向的对象地址
- 传递对象地址时"Address expression must be an lvalue or a function designator"
- 在C++中存储对象地址的数据结构
- 从函数初始化对象地址
- 使用reintepret_cast解释对象地址
- 为什么基类指针总是指向基类,即使它持有派生类对象地址
- 是否可以将堆栈对象地址赋给placement new
- <<运算符重载不起作用;仍在打印对象地址
- 关于返回对象地址的困惑