文章目录
构造函数
- 构造函数 没有返回值同时也没有void
参考代码:
不带参数
class Line
{
public:
void setLength( double len );
double getLength( void );
Line(); // 这是构造函数
private:
double length;
};
// 成员函数定义,包括构造函数
Line::Line(void)
{
cout << "Object is being created" << endl;
}
带参数
class Line
{
public:
void setLength( double len );
double getLength( void );
Line(double len); // 这是构造函数
private:
double length;
};
// 成员函数定义,包括构造函数
Line::Line( double len)
{
cout << "Object is being created, length = " << len << endl;
length = len;
}
用初始化列表来初始化
C::C( double a, double b, double c): X(a), Y(b), Z(c)
{
....
}
Line::Line( double len): length(len)
{
cout << "Object is being created, length = " << len << endl;
}
等效于
Line::Line( double len)
{
cout << "Object is being created, length = " << len << endl;
length = len;
}
继承中子类的构造函数
- 子类继承父类中所有的成员变量和方法,唯独不继承构造函数
因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。 - 具体子类调用构造函数的方法如下:
- 每一个类,如果程序员没有显示的给出构造函数,那么编译器会给一个默认的无参数构造函数
- 创建子类对象时,首先执行父类的构造方法,然后执行子类的构造方法
- 若父类只显示的给出了有参数构造方法,那么子类必须显示的调用父类的构造方法。
- 若父类同时显示给出了无参数构造方法,或未给出构造方法(编译器给一个默认无参数构造方法),则先调用父类的无参数构造方法,且子类不必显示调用父类的构造方法。
参考代码:
#include <iostream.h>
class animal
{
public:
animal(int height, int weight)
{
cout<<"animal construct"<<endl;
}
…
};
class fish:public animal
{
public:
fish():animal(400,300)
{
cout<<"fish construct"<<endl;
}
…
};
void main()
{
fish fh;
}
析构函数
- 类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
- 析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。
- 析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。
参考代码:
#include <iostream>
using namespace std;
class Line
{
public:
void setLength( double len );
double getLength( void );
Line(); // 这是构造函数声明
~Line(); // 这是析构函数声明
private:
double length;
};
// 成员函数定义,包括构造函数
Line::Line(void)
{
cout << "Object is being created" << endl;
}
Line::~Line(void)
{
cout << "Object is being deleted" << endl;
}