关于c++继承中的函数覆盖问题
时间:2011-12-15
来源:互联网
{
private:
int a;
public:
void fun1() {..}
void fun2() {..}
};
class B :protected A
{
protected:
int b;
public:
void fun1() {..}
void fun2() {..}
};
问题: class B 的保护成员有几个(包括数据成员和函数成员)?
我认为只有一个int b,因为class A中的fun1() 和fun2() 被覆盖了不是吗?
作者: neolyao 发布时间: 2011-12-15
作者: duke56 发布时间: 2011-12-15
被覆盖了不是被删除了。
覆盖只是在某个视野看不到而已。
实际上他还是存在的。
只要你这样访问:
A::fun1();//存在。
作者: mingliang1212 发布时间: 2011-12-15
我认为只有一个int b,因为class A中的fun1() 和fun2() 被覆盖了不是吗?
被覆盖了不是被删除了。
覆盖只是在某个视野看不到而已。
实际上他还是存在的。
只要你这样访问:
A::fun1();//存在。
如果这样访问A::fun1();不恰恰说明fun1()是属于A的而不是属于B的了吗??
作者: neolyao 发布时间: 2011-12-15
this->A::fun1();//this指针是属于B的。
在B的某个函数中,如果有:
A a;
a.A::fun1()//错误。无法访问A类的成员fun1();只能访问属于自己的fun1()也就是派生过来的那一部分是B所有的。
a.fun1()//同上。
作者: mingliang1212 发布时间: 2011-12-15
引用 2 楼 mingliang1212 的回复:
我认为只有一个int b,因为class A中的fun1() 和fun2() 被覆盖了不是吗?
被覆盖了不是被删除了。
覆盖只是在某个视野看不到而已。
实际上他还是存在的。
只要你这样访问:
A::fun1();//存在。
如果这样访问A::fun1();不恰恰说明fun1()是属于A的而不是属于B的了吗??
……
子类是父类的超集,C++成员函数不属于任何类,它们就是一段代码。
使用跳转指令就可以到达函数地址并执行,记得给它们传入正确的this指针就可以了。
C++中只要不是私有继承,子类就可以使用 父类::函数名(); 的形式调用父类的任何非
因为 父类::函数名(); 已经提供给了编译器足够的信息,可以转向正确的函数地址。
作者: mymixing 发布时间: 2011-12-15
子类是父类的超集,C++成员函数不属于任何类,它们就是一段代码。
使用跳转指令就可以到达函数地址并执行,记得给它们传入正确的this指针就可以了。
C++中只要不是私有继承,子类就可以使用 父类::函数名(); 的形式调用父类的任何非
因为 父类::函数名(); 已经提供给了编译器足够的信息,可以转向正确的函数地址。
引用 2 楼 mingliang1212 的回复:
C++中只要不是私有继承,子类就可以使用 父类::函数名();
为什么私有继承不行呢!!!
作者: neolyao 发布时间: 2011-12-15
为什么私有继承不行呢!!!
没看过C++的任何版本历年标准,但只要知道
编译器没给你实现就OK了,如果编译器支持,那么就可以这么做
你写的任何C\C++语句,电脑本身都是看不懂的,电脑并不知道C\C++是个什么东西
你写的C\C++语句都是由编译器来翻译成2进制码,再link成可执行文件的。
所以你只能写一些编译器支持你做的事情,一旦违规,它会回绝你的编译请求。
就是编译报错。
作者: mymixing 发布时间: 2011-12-15
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28