1, 构造函数
(1) 每个类都要定义它自己的构造函数和析构函数, 是类的成员函数.
特点: 名称与类名相同; 没有返回值; 一定是共有函数, 可以直接访问类内所有成员函数; 可以带默认形参, 可以重载;
- class clock
- {
- public:
- // 无参构造函数
- clock()
- {
- cout << "无参构造函数" << endl;
- }
- // 有参构造函数
- clock(int h, int m , int s)
- {
- hour = h;
- minute = m;
- second = s;
- cout << "有参构造函数" << endl;
- }
- //// 有默认参数值的有参构造函数
- //clock(int h=8, int m=20, int s=20)
- //{
- // hour = h;
- // minute = m;
- // second = s;
- // cout << "有默认参数值的有参构造函数" << endl;
- //}
- // 拷贝构造函数完成, 用一个对象初始化另一个对象
- clock(const clock &t) // const 加不加都可以
- {
- cout << "复制构造函数" << endl;
- }
- private:
- int hour; int minute; int second;
- };
- void main()
- {
- clock myclock; // 调用无参构造函数
- //clock myclock_1();// 调用有参构造函数, 此时会出错, 因为没有传参数
- clock myclock_2(8,20,20);// 有参构造函数, 必须要写上参数
- clock myclock_3(myclock_2);// 调用复制构造函数
- system("pause");
- }
(2) 注意:
(1) 类中没有定义任何构造函数时, 才使用默认构造函数;
(2) 不能同时出现, 无参构造函数和带有全部默认参数值的构造函数; 二者只能出现一个;
(3) 复制构造函数, 使用一个已存在的对象, 初始化一个新的同类对象. 如果未定义, 系统将会自动生成; 但是, 如果申请动态空间 (堆空间), 则必须定义.
2, 对象数组
解释为什么需要构造函数, 在定义对象数组时, 自动初始化.
- class student
- {
- public:
- student(int, char*);
- student();
- ~student();
- void set(int i, char* c);
- void printstu()
- {
- cout << "id:" << id << "name:" << name << setw(5) << endl;
- }
- private:
- int id;
- string name;
- };
- student::student()
- {
- cout << "默认无参构造函数" << endl;
- }
- student::student(int i, char* c)
- {
- id = i;
- name = c;
- cout << "有参构造函数" << endl;
- }
- student::~student()
- {
- cout << "析构函数" << endl;
- }
- void student::set(int i, char* c)
- {
- id = i;
- name = c;
- }
- void main()
- {
- // 对象数组
- student stu[5] = {
- student(1,"li"),
- student(2,"wang")
- };
- stu[2].set(3, "zhao");
- system("pause");
- }
定义两个构造函数, 此时定义对象数组时, 可以不用初始化.
构造函数在定义对象时调用, 析构函数在程序结束时调用, 而且, 析构顺序与构造顺序相反.
来源: http://www.bubuko.com/infodetail-2899777.html