一、构造函数是类中的特殊成员函数
构造函数的作用是完成对象的初始化
给出类定义时如果类中没有编写任何构造函数,则由系统自动添加一个不带参数的构造函数。
构造函数在类体内的生命形式
类名(形参1,形参n);//也可以没有形参
构造函数的三种形式:
- 类名::类名(形参1,形参n):x1(形参1),xn(形参n){}
- 类名::类名(形参1,形参n){x1 = 形参1;xn=形参n}
- 类名::类名(){x1=初始化表达式1 ;xn=初始化表达式n;}
说明:
- 构造函数名字必须和类名相同;
- 构造函数定义不能有return返回值 即使为void也不可以;
- 另外类可以有多个构造函数,即函数重载;或重载;
- 构造函数的参数在排列时无顺序要求,只要保证互相对应即可;
- 构造函数可以使用默认参数;
- 程序中说明一个对象时,程序自动调用构造函数来初始化对象;
代码:
#include <iostream> using namespace std; class MyDate { public: MyDate(int,int,int); ~MyDate();//析构函数 void printDate(); private: int year, month, day; }; MyDate::MyDate(int y=1970,int m=1,int d=1) { year = y; month = m; day = d; } void MyDate::printDate() { cout << year << "/" << month << "/" << day << endl; } MyDate::~MyDate() { } int main() { //利用构造函数的重载 //使用指针创建构造函数 MyDate* pd = new MyDate(); pd->printDate(); MyDate* pd1 = new MyDate(2000); pd1->printDate(); MyDate* pd2 = new MyDate(2000,6); pd2->printDate(); MyDate* pd3 = new MyDate(2000,6,6); pd3->printDate(); return 0; }
代码2:
#include <iostream> using namespace std; class MyDate { public: MyDate(int,int,int); ~MyDate();//析构函数 void printDate(); void printDate(MyDate); private: int year, month, day; }; MyDate::MyDate(int y=1970,int m=1,int d=1) { year = y; month = m; day = d; } void MyDate::printDate() { cout << year << "/" << month << "/" << day << endl; } void MyDate::printDate(MyDate i) { cout << i.year << "/" << i.month << "/" << i.day << endl; } MyDate::~MyDate() { } int main() { //利用构造函数的重载 // 使用构造函数创建对象 cout << "使用构造函数创建对象" << endl; MyDate d(); MyDate d1(1998); MyDate d2(1998,12); MyDate d3(1998, 12, 13); //d.printDate(); d1.printDate(); d2.printDate(); d3.printDate(); //使用指针创建构造函数 cout << "使用指针创建构造函数" << endl; MyDate* pd = new MyDate(); pd->printDate(); MyDate* pd1 = new MyDate(2000); pd1->printDate(); MyDate* pd2 = new MyDate(2000,6); pd2->printDate(); MyDate* pd3 = new MyDate(2000,6,6); pd3->printDate(); cout << "使用构造函数创建对象数组" << endl; //使用构造函数创建对象数组 //MyDate A[3]; MyDate B[3] = { MyDate(1980),MyDate(1980,8) }; MyDate C[3] = { MyDate(1980,9,10) }; //A->printDate(); B->printDate(); C->printDate(); return 0; }
运行结果:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。