在派生类中具有相同签名但继承为受保护的函数
Functions with same Signature in derived class but inherited as Protected
基类函数和派生类函数具有相同的签名,但继承为受保护的。在main中,我已经将派生类对象分配给基类指针,并且我正在尝试访问该函数。它会导致错误。是因为受保护吗?
class base{
public:
void test(){
cout<<"test in basen";
}
};
class derived:protected base{
public:
void test(){
cout<<"test in derivedn";
}
};
int main(){
base *ptr;
derived obj;
ptr=&obj;
ptr->test();
return 0;
}
错误:
In function 'int main()':
error: 'base' is an inaccessible base of 'derived'
ptr=&obj;
^~~
编辑问题中的代码发生了变化,所以我改变了整个答案:
私有和受保护的继承都允许覆盖私有/受保护基类中的虚函数,两者都不声明派生是其基类的一种。所以ptr=&obj;不起作用,因为它们不是同一类型。
受保护的继承允许派生类的派生类 了解继承关系。因此,您的孙子是 有效地暴露您的实施细节。这两者兼而有之 好处(它允许受保护派生类的派生类 利用与受保护基类的关系(和成本( 受保护的派生类无法更改关系,否则 可能会破坏进一步的派生类(。
由于你使用的是对外界的保护继承derived
不是从base
派生的,只有derived
及其子类知道它是从base
派生的。
因此:
base *ptr;
derived obj;
ptr=&obj;
是否将derived*
分配给完全不相关的类型base*
。如果您希望derived
可转换为base
则需要使用public
继承,protected
继承故意向外界隐藏基类。
相关文章:
- 继承和友元函数,从基类访问受保护的成员
- 为什么继承的受保护构造函数不能公开?
- 在使用受保护和继承时无法访问在类中声明的私有成员
- 继承期间受保护成员的皮条
- 在 lambda 函数 g++-4.8 中调用继承的受保护子类型
- 在派生类中具有相同签名但继承为受保护的函数
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 使从一个基类派生的类能够使用继承的受保护成员
- 为什么继承的受保护操作员=()有公共访问权限
- C :可以从类及其受保护的成员类型继承可以继承吗?
- C++对已继承的受保护类成员的未定义引用
- 如何访问多个继承类中的受保护成员
- 用受保护的继承指向基类方法
- C 继承访问受保护的数据成员
- 受保护的方法在 c++ 中继承时可以成为私有方法
- 继承公共/受保护/私有构造函数
- 虚拟继承和受保护的成员访问
- 继承受保护的函数和公共变量C++时发生多重继承编译错误
- C++继承:受保护的变量不可用
- 模板类未从另一个模板类继承受保护的变量