C++学习笔记---类的继承(二)
来源:互联网 发布:幕墙下料软件 编辑:程序博客网 时间:2024/06/03 16:44
有Child类继承于Parent类
class Child : public Parent{}
那么,当创建一个子类对象时:(编辑器默认动作)
子类对象构造时,先调用父类的构造函数,再调用子类的构造函数。
子类对象析构时,先调用子类的析构函数,再调用父类的析构函数。
当父类有多个构造函数,可以显式的调用其中的一个构造函数。
如果没有显示调用,则调用了父类的“默认构造函数”
class Child : public Parent
{
public:
Child():Parent(1,1)
{
}
}
当一个类被继承时,应该将父类的析构函数声明为virtual,否则会有潜在的问题。
class Parent
{
virtual ~Parent(){}
}
析构函数声明为virtual为了考虑以下场景:
Parent * p = new Child();
delete p;
如果析构函数没有标识为virtual,则有潜在的隐患,并有可能直接导致程序崩溃。(资源没有被释放,及延伸问题)。
(1)类的大小由成员变量决定,与成员函数的个数无关,成员函数对所占内存空间是没有影响的。
(2)如果有成员函数被声明为virtual,那类的大小会有些微的变化
多重继承
语法:
用Father,Mother表示两个类
class Child:public Father ,public Mother
{
};
表示Child继承于Father,Mother
在写法上,以冒号引导,每个父类用逗号隔开
多重继承的结果:从所有父类中,继承他们所有可以被继承的成员(public/protected)
多重继承的问题:很明显,当多个父类有相同的成员时,会影响冲突。所以一般不使用。
纯虚函数的语法:
(1)将成员函数声明为virtual
(2)后面加上 =0
(3)该函数没有函数体
例如:
class CmdHandler
{
public:
virtual void OnCommand(char* cmdline) = 0;
};
含有纯虚函数的类,称为抽象类(或称纯虚类)。
例如,CmdHandler中有一个纯虚函数OnCommand(),因此,它是纯虚类
抽象类不能够被实例化,即无法创建该对象。
CmdHandler ch ; //编译错误
CmdHandler * p = new CmdHandler();//编译错误
抽象类/纯虚函数的实际用途:充当的“接口规范”
接口规范:凡是遵循此规范的类,都必须实现指定的函数接口。通常是一系列接口。
比如:
class CmdHandler
{
public :
virtual void OnCommand(const char* cmdline)=0;
};
可以理解为:凡是遵循CmdHandler规范的类,都必须实现指定的函数接口:OnCommand()
class Child : public Parent{}
那么,当创建一个子类对象时:(编辑器默认动作)
子类对象构造时,先调用父类的构造函数,再调用子类的构造函数。
子类对象析构时,先调用子类的析构函数,再调用父类的析构函数。
当父类有多个构造函数,可以显式的调用其中的一个构造函数。
如果没有显示调用,则调用了父类的“默认构造函数”
class Child : public Parent
{
public:
Child():Parent(1,1)
{
}
}
当一个类被继承时,应该将父类的析构函数声明为virtual,否则会有潜在的问题。
class Parent
{
virtual ~Parent(){}
}
析构函数声明为virtual为了考虑以下场景:
Parent * p = new Child();
delete p;
如果析构函数没有标识为virtual,则有潜在的隐患,并有可能直接导致程序崩溃。(资源没有被释放,及延伸问题)。
(1)类的大小由成员变量决定,与成员函数的个数无关,成员函数对所占内存空间是没有影响的。
(2)如果有成员函数被声明为virtual,那类的大小会有些微的变化
多重继承
语法:
用Father,Mother表示两个类
class Child:public Father ,public Mother
{
};
表示Child继承于Father,Mother
在写法上,以冒号引导,每个父类用逗号隔开
多重继承的结果:从所有父类中,继承他们所有可以被继承的成员(public/protected)
多重继承的问题:很明显,当多个父类有相同的成员时,会影响冲突。所以一般不使用。
纯虚函数的语法:
(1)将成员函数声明为virtual
(2)后面加上 =0
(3)该函数没有函数体
例如:
class CmdHandler
{
public:
virtual void OnCommand(char* cmdline) = 0;
};
含有纯虚函数的类,称为抽象类(或称纯虚类)。
例如,CmdHandler中有一个纯虚函数OnCommand(),因此,它是纯虚类
抽象类不能够被实例化,即无法创建该对象。
CmdHandler ch ; //编译错误
CmdHandler * p = new CmdHandler();//编译错误
抽象类/纯虚函数的实际用途:充当的“接口规范”
接口规范:凡是遵循此规范的类,都必须实现指定的函数接口。通常是一系列接口。
比如:
class CmdHandler
{
public :
virtual void OnCommand(const char* cmdline)=0;
};
可以理解为:凡是遵循CmdHandler规范的类,都必须实现指定的函数接口:OnCommand()
阅读全文
0 0
- C++学习笔记---类的继承(二)
- Objective-C学习笔记(二十五)——属性与方法的继承学习
- Objective-C学习笔记(二十六)——成员变量的继承学习
- Objective-C学习笔记十:继承二
- Objective-C 学习笔记(二) 类继承,组合,多态等
- ios学习笔记(二)之Objective-C类、继承、类别和协议 - superlucky
- JAVA学习笔记二:类的继承、多态性
- java学习笔记(二十二)继承的进一步研究
- 学习C的一些笔记(二)
- java学习笔记(二十一)继承
- 黑马程序员 — Objective-C学习笔记(二):继承
- 【C++】【学习笔记】【016】this指针和类的继承
- OBJ-C类的继承和派生学习笔记
- Sencha Touch 2 学习笔记(二)----定义类与类的继承(转)
- C++学习笔记11,public继承,公有继承(二)
- 类的继承学习笔记
- 【学习笔记】类的继承
- 类的继承--学习笔记
- 图片中添加点击事件后没有反应的问题分析
- Unity3D_touch事件和点击事件
- SCUT Training 20170913 Problem N
- ASP.NET HttpRuntime.Cache缓存类使用总结
- 【tyvj1473】校门外的树3
- C++学习笔记---类的继承(二)
- 读取properties文件
- quartz与timer
- ubuntu wpasupplicant 连接无线网
- 用phpstudy正确配置阿里服务器 网站就是不能浏览原因
- 怎么解决电脑频繁死机?
- 工作新的开始
- 关于微信wx.previewImage图片没有正常显示的问题
- jQuery 停止动画 stop()