派生类的基本函数的实现
来源:互联网 发布:java const 编辑:程序博客网 时间:2024/05/22 08:17
基类的构造函数、析构函数、赋值函数都不能被派生类继承。如果类之间存在继承关系,在编写上述基本函数应注意以下事项:
(1)派生类的构造函数应在其初始化列表里显式地调用基类的构造函数(除非基类的构造函数不可访问);
(2)如果基类是多态,那么必须把基类的析构函数定义为虚函数,这样就可以像其他虚函数一样实现动态绑定;否则有可能造成内存泄漏,示例如下:
#include<iostream.h>
class Base
{
public:
virtual ~Base() { cout <<"Base::~Base()"<<endl; }
//...
};
class Derived : public Base
{
public:
virtual ~Derived()
{
}delete p_test;
cout<<“Derived::~Derived()"<<endl;
private:
};char *p_test;
void main(void)
{
}Base *pB = new Derived; //upcast
delete pB;
输出结果为:Derived::~Derived() Base::~Base()
如果析构函数不是虚函数,那么输出结果将为:Base::~Base
就是说,如果基类的析构函数不是虚函数,派生类对象拥有的内存单元就不会释放,因此造成内存泄漏。
(3)在编写派生类赋值函数时,注意不要忘记对基类的数据成员重新赋值,这可通过调用基类的赋值函数来实现,示例如下:
class Base
{
public:
private://...
Base& operator = (const Base& other); //Base的拷贝赋值函数
};int m_i, m_j, m_k;
class Derived : public Base
{
public:
private://...
Derived& operator=(const Derived& other); //Derived的拷贝赋值函数
int m_x, m_y, m_z;
};
Derived& Derived::operator=(const Derived& other)
{
//(1)检查自赋值
if(this != &other)
{
//(2)对基类的数据成员重新赋值
}Base::operator=(other); //因为不能直接操作基类的私有数据成员
//(3)对派生类的数据成员赋值
m_x = other.m_x;
m_y = other.m_y;
m_z = other.m_z;
//(4)返回对象的引用
return *this;
}
提示:要想更好的了解构造函数、析构函数和赋值函数,还需要阅读文献[Cline]、[Meyers]和[Murry]。
- 派生类的基本函数的实现
- 如何实现派生类的基本函数
- 如何在派生类中实现类的基本函数
- 派生类中实现类的基本函数
- 高质量c++(如何在派生类中实现类的基本函数)
- 9.8 如何在派生类中实现类的基本函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 派生类的构造函数
- 用户指南 64位win7安装驱动具体过程【乡巴佬】
- 结婚是人生中最重要的事情之一:请看五个经典浪漫的婚宴形式
- 模拟lastlog程序
- Android 蓝牙开发详述
- std::auto_ptr
- 派生类的基本函数的实现
- matplotlib画图基础,华氏温度到摄氏温度的转换
- 如何使用PC/SC非接触读卡器获取13.56M卡片UID以及ATS
- &分享两妙方 帮你打开win7重装后的文件夹&【386w】
- Cisco(思科)交换机VLAN设置(转自磊哥方法)
- Mailcore 2: Introduction
- ※数据结构※→☆线性表结构(list)☆============单向链表 链式存储结构(list single)(二)
- java中导入导出Excel表格(jxl的API应用)
- 2013年的目标