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"); }
定义两个构造函数,此时定义对象数组时,可以不用初始化。
构造函数在定义对象时调用,析构函数在程序结束时调用,而且,析构顺序与构造顺序相反。
原文地址:https://www.cnblogs.com/eilearn/p/10187149.html
时间: 2024-10-09 20:10:48