对C++的多态的思考
来源:互联网 发布:C语言下列说法正确的是 编辑:程序博客网 时间:2024/05/16 02:48
在面向对象的编程过程中,经常使用多态,以便得到不同的实现。
不使用virtual关键字
class Super
{
public:
/*Super():id(0),str("hello")
{
}*/
void DoSth()
{
cout<<"Super-DoSth"<<endl;
//cout<<str<<endl;
}
/*~Super()
{
}*/
//private:
//int id;//4bytes
//string str;//32bytes
};
Super类的布局:
+---
+---
Sub类继承Super,重写DoSth函数。
class Sub : public Super
{
public:
void DoSth()
{
cout<<"Sub-DoSth"<<endl;
}
};
Sub类的布局:
class Sub size(1):
+---
| +--- (base class Super)
| +---
+---
//函数的调用:
Super super;
((Sub&)super).DoSth();//输出Sub-DoSth
通过向子类的类型的转换,实现调用子类的函数。
使用virtual关键字
把Super的DoSth()前加virtual,如下:
virtual void DoSth()
那么Super类的布局变为:
class Super size(4):
+---
0 | {vfptr}
+---
Super::$vftable@:
| &Super_meta
| 0
0 | &Super::DoSth
Super::DoSth this adjustor: 0
Sub类的布局变为:
class Sub size(4):
+---
| +--- (base class Super)
0 | | {vfptr}
| +---
+---
Sub::$vftable@:
| &Sub_meta
| 0
0 | &Sub::DoSth
Sub::DoSth this adjustor: 0
//函数的调用:
Super super;
((Sub&)super).DoSth();//输出Super-DoSth
通过以下方式实现调用子类的方法:
Sub sub;
Super* pSuper=⊂
pSuper->DoSth();//输出Sub-DoSth
总结:在设计类的时候,考虑到函数多种实现的时候,不一定非要在函数前面加vritual,当加virtual的时候会有虚函数表,会增加开销。
- 对思考的思考
- 对C++的多态的思考
- 对c语言内存的思考
- 对无效思考的思考
- 对.Text的思考
- 对UML的思考
- 对婚姻的思考
- 对递归的思考
- 对"学习"的思考
- 对程序员的思考
- 对Xwindow的思考
- 对未来的思考
- 对软件技术的思考
- 对软件的思考
- 对黑客技术的思考
- 对婚姻的思考
- 对扩展性的思考
- 对++的再次思考
- POJ 2503 Babelfish STL-map容器
- Git终端软件安装使用
- Groovy入门-1
- Welcome to Itechco Associates
- 常用的 jQuery 事件方法
- 对C++的多态的思考
- Android studio————基础设置
- Notes锁定机制
- Python ProcessPoolExecutor logging Not pickle able
- Sass的编译环境
- MySQL 获得当前日期时间(以及时间的转换)
- 1220.Look for homework
- linux基本操作命令
- 行内标签的实现