关于C++中的一些概念
来源:互联网 发布:万能手机数据恢复软件 编辑:程序博客网 时间:2024/06/18 06:22
1:名称遮盖
名称遮盖就是子类中声明的函数名与父类中声明的函数名相同(返回值,参数类型和个数同于不同无关紧要,函数是否为虚也无关紧要),子类对象访问不到父类所定义的同名函数。
示例1:
#include <iostream.h>class B{public:void fun1(){cout<<"B::fun1"<<endl;}};class D:public B{public:void fun1(int ){cout<<"D::fun1 int"<<endl;}};void main(){D d;d.fun1();}
上述代码回报错:error C2660: 'fun1' : function does not take 0 parameter
将函数改成virtual 也一样。
2:虚函数
虚函数的定义上上很多,不再赘述。这里想讨论一下虚函数的访问。
示例2:
#include <iostream.h>class B{public:void fun1(){cout<<"B::fun1"<<endl;}};class D:public B{public:virtual void fun1(int ){cout<<"D::fun1 int"<<endl;}virtual void fun1( ){cout<<"D::fun1"<<endl;}};void main(){D d;d.fun1();B * pB=&d;pB->fun1();}
结果为:
D::fun1
B::fun1
表明在编译器内并不是直接查找虚函数表,来判断fun1是否在虚函数表中。就我而言,编译器会根据静态类型(B)判断虚函数表的哪些函数,指针(pB)可以访问。此例中基类B并没有虚函数,故pB不会去访问虚函数表,进而不会访问虚函数表中的fun1。
示例3:
#include <iostream.h>class B{private: //注意访问权限virtual void fun1(){cout<<"B::fun1"<<endl;}};class D:public B{public:virtual void fun1(int ){cout<<"D::fun1 int"<<endl;}virtual void fun1( ){cout<<"D::fun1"<<endl;}};void main(){D d;d.fun1();B * pB=&d;pB->fun1();//不可访问}
pB->fun1()的访问级别受静态类型(B)的限制。
示例4:
#include <iostream.h>class B{public:virtual void fun1(){cout<<"B::fun1"<<endl;}};class D:public B{private://注意访问权限virtual void fun1(int ){cout<<"D::fun1 int"<<endl;}virtual void fun1( ){cout<<"D::fun1"<<endl;}};void main(){D d;//d.fun1();B * pB=&d;pB->fun1();}
结果:D::fun1
通过父类指针(pB)访问到了子类的私有成员。说明函的访问权限由静态类型确定。
以上示例只是用于语法测试,没有考虑现实中面向对象设计所应该遵循的原则。如有错误,望君赐教。
- 关于C++中的一些概念
- 关于备份、恢复过程中的一些概念
- 关于存储管理中的一些概念
- C/C++编程中的一些概念问题
- 关于存储管理中的一些概念-----作者:QuietHeart
- 关于一些小概念
- 一些概念 关于硬件
- 关于中断一些概念
- 关于KVM一些概念
- 摄影中的一些概念
- hibernate中的一些概念
- C++中的一些概念
- sqlserver 中的一些概念
- 数据结构中的一些概念
- Wifi中的一些概念
- css中的一些概念
- GPGPU中的一些概念
- BT656中的一些概念
- SQL Server 2005 APPLY 运算符
- 软件测试面试题及解析(四)
- c++内存管理机制
- linux下的ramdisk (/dev/ram*)
- 将Excel2007表格转为Word2007文档的简单方法
- 关于C++中的一些概念
- Combo Box使用
- ramfs 和 tmpfs
- 软件测试面试题及解析(五)
- UNIX下什么是可执行权限?
- upper
- 我亦安在,安好。
- C++Builder 中如何修改服务描述
- append.pl