gpt4 book ai didi

C++私有(private)类继承

转载 作者:太空狗 更新时间:2023-10-29 20:38:46 26 4
gpt4 key购买 nike

请原谅我的英语水平;因为我不是母语人士。

我从我的大学教科书中得到这段代码,但我几个小时都无法理解它...

#include<iostream>
using namespace std;

class base{
int a;
protected:
void seta(int a){this->a=a;}
public:
void showa(){cout<<a;}
};

class derived: private base{
int b;
protected:
void setb(int b){this->b=b;}
public:
void showb(){
seta(5); //1
showa(); //2
cout<<b;
}
};

class grandderived: private derived{
int c;
protected:
void setab(int x){
seta(x); //3
showa(); //4
setb(x); //5
}
};

int main(){
return 0;
}

到目前为止,这是我的理解:

class derived 继承了 class base 为私有(private)的,因此类 base 中的所有内容都是私有(private)的。无法从子类访问 afaik 私有(private)成员。所以,数字 1、2 不会工作。class grandderived 也继承了 class derived 作为私有(private)的,因此 3、4 和 5 也不会因为同样的原因工作。

但答案告诉我只有数字 3 和 4 不起作用,其他的都可以。我编译了它,是的,它告诉我同样的事情。

我是不是对继承的工作方式有一些误解,还是还有其他我不知道的事情?

最佳答案

我相信这就是正在发生的事情:

  1. base 类将 setashowa 声明为 protected 和公开的。这意味着子类可以访问它们。

  2. derived 继承自 base。这意味着它可以访问 base 中 protected 和公开的所有内容,包括 setashowa。它私有(private)继承 base 的事实意味着继承的成员将被标记为私有(private)的,因此不能在子类 derived 的类中访问(即 grandderived ).

  3. 同样的模式出现在derivedgrandderived 之间。

因此:derived可以访问base的方法,grandderived可以访问derived的方法,但不是 base

关于C++私有(private)类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30572835/

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