gpt4 book ai didi

c++ - 用虚函数保护继承

转载 作者:行者123 更新时间:2023-11-30 02:01:18 31 4
gpt4 key购买 nike

我编写了一个具有 protected 继承性的虚函数

#include<iostream>
using namespace std;
class D{
private:
int a;
protected:
int b;
public:
D(){a=b=c=0;}
virtual void f(){
a=2;
cout <<"D::f"<<a<<endl;
}
void g(){cout<<"D::g"<<a<<endl;}
int c;
};
class E:protected D{
private:
int a,b,c;
public:
E(){a=b=c;}
void f(){
a=3;
cout<<"E::f"<<a<<endl;
}
void g(){cout<<"E::g"<<a<<endl;}
};
int main(){
D *d = new E;
d->f();
d->g();
return 0;
}

但如果我使用它,它会变成无法访问的基础。

如果我把它改成 public inherience ,它可以运行。

我想知道为什么我不能使用 D *d = new E;具有私有(private)和 protected 继承权?

提前致谢。

最佳答案

privateprotected 基地意味着该基地对世界不可访问。因此,当您编写需要从派生基数到不可访问基数的转换的表达式时,由于可访问性规则,这是被禁止的因为转换需要在调用点进行这是世界的一部分。

在面向对象的术语中,privateprotected 基不定义is-a 关系。它实际上是一种 implemented-in-terms-of 关系,简单来说就是组合。

关于c++ - 用虚函数保护继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245553/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com