请教C++高手: 关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教C++高手: 关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成相关的知识,希望对你有一定的参考价值。

请教C++高手:
关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成员方法(包括private方法)都被子类所继承,但是为什么在子类的内部不能访问基类的private方法,private方法不是被子类继承了吗?既然被继承下去,基类的private方法也就是子类的一部分,为什么在子类中还是不能访问private方法呢?

private是指私有,好比父亲的隐私,只有他自己知道,哪怕儿子也不能看(这也是protected出现的原因),这是设计的时候就规定好了的,没有为什么
protected,是指受保护,何为受保护,可以理解成比private松,比public紧,是可以让儿子看的隐私,这是专门针对继承的一种权限设置
public也就是谁都可以看了

你的问题里,基类的private的确是子类的一部分,子类的内存空间也有private的空间,但是能不能访问是另一个问题,和权限设置有关。另外,访问也不单指直接读写内存,还可以通过父类的一些成员函数来间接读取或者写入。
参考技术A 的确是这样的,在c++中子类继承父类的话,一定是全部继承的,全部的函数和属性,
但是访问的时候是有权限的。
#include <stdio.h>
/*随机一个非0的数*/
class aa

private:
int a;
int b;
public:
int c;
void f()

printf("%d",aa::a);

;
class bb :public aa

private:
int c;
public:
void getf()

aa::f();

;
int main()

aa aaa;
printf("%d\n",sizeof(aaa));
bb bbb;
printf("%d",sizeof(bbb));
bbb.getf();
return 0;


上面的这个程序就说明了是全部继承的,可以通过公有的方法来调用私有的属性。
我就用子类的函数显示出了父类的私有属性。本回答被提问者采纳
参考技术B 这是硬性规定,有些数据和方法是不希望子类使用的。 参考技术C 你再看看public.private.protect三种继承的区别,仔细点年轻人

C++中,子类会继承父类的虚函数表!对于父类的析构函数(虚函数) 也会继承吗?

一个子类继承了父类的虚函数表,而且父类的析构函数是虚函数,那么这个虚函数会放到父类的虚函数表中吗?子类继承时,这个虚函数表中是否有父类的析构函数?如果继承了这个父类的析构函数,那么子类的析构函数也是虚函数的时候,子类的虚函数是否会替换父类的虚函数。如果不替换,那么子类在使用调用析构函数时,是直接调用虚函数表中的子类析构函数吗?如果子类的的虚函数表中有父类的析构函数,看起来这个父类析构函数的存在似乎没有任何意义!!!……求大神解答!!!

上面的问题,楼上已经回答啦!我来说说这个意义吧!
如果子类的的虚函数表中有父类的析构函数,看起来这个父类析构函数的存在似乎没有任何意义!!
类是否需要一个虚析构函数?
如果一个类,有子类那么这个类就应该需要一个虚析构函数。虚函数也只有在继承的时候才会有用的。
说个例子:
class A
string t;
;
class B:A
string s;
;
int main()
A* bp=new B; //这句话是没有问题的吧!
delete bp; //但是这句话就会报错啦、除非你在A里面加上虚析构函数。
return 0;
这个就是他的意义吧!这个例子不是我原创的,来自《c++沉思录》
参考技术A 只要是父类的函数, 子类都会继承, 包括折构函数

而父类的函数是虚构函数的时候, 子类如果不重新定义该函数, 则正常继承. 否则覆盖了父类的盖函数

回到你的问题, 如果父类折构函数是虚函数, 子类继承的时候, 其折构函数首先默认是父类的折构函数, 如果子类重新定义了折构函数, 那就不再使用父类的, 但函数名字不变.

折构函数 是指 可以被子类重定义; 折构函数 是实现一个功能的函数. 2个层次不一样.追问

谢谢!……您的意思是当子类继承父类的虚析构函数时,子类的虚函数表中会有这个父类是析构函数 的,不过您说当子类重新定义虚析构函数时,子类不在使用父类的析构函数 的意思是 子类的虚函数表中 多了一项子类的虚函数地址还是说虚函数表中原来父类的虚函数地址 被子类的替代了???

参考技术B 不会自己创

以上是关于请教C++高手: 关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成的主要内容,如果未能解决你的问题,请参考以下文章

关于java中子类继承父类的构造方法

关于C++父类与子类之间变量的问题

关于C++基类与派生类

C++ 中,类的继承:父类当使用虚函数时候,子类对该函数进行重写的话,属于子类成员函数对虚函数的覆盖!

请教一下C#中父类静态构造函数在子类中为啥不会和子类的静态构造函数一起执行

C++中子类从基类都继承啥?