类与对象之构造函数


Main Point

  • 掌握构造函数的定义,特点和作用
  • 掌握无参构造函数与带默认参数值的构造函数的定义与使用
  • 掌握复制构造函数的定义与使用
  • 掌握析构函数的定义与使用

构造函数

​ 构造函数是类的一种特殊的成员函数。

特点:

  1. 无返回值,不用void
  2. 函数名与类名相同
  3. 构造函数可以有参数,可以发生重载
  4. 创建对象的时候,构造函数会自动调用,而且只调用一次

析构函数

​ 创建类的对象时,系统会自动调用构造函数。同样,当对象生命结束时,需要释放所占的内存资源,程序将自动调用类的析构函数来完成。

特点:

  1. 进行清理操作
  2. 无返回值,不用void
  3. 函数名于类名名称前加~
  4. 析构函数无参,不能重载
  5. 对象在销毁前会自动调用析构函数,而且仅调用一次

构造函数和析构函数实例

#include<iostream>
using namespace std;
class CDate
{
int Date_Year, Date_Month, Date_Day;
public:
//构造函数
//无返回值无void
//函数名与类名相同
//可以有参数,可以重载
//创建对象时,构造函数会自动调用,并且只调用一次
CDate(int, int, int);
void Display();

};

#include "l3_07.h"
CDate::CDate(int y, int m, int d)
{
cout << "Executing constructor...";
Date_Year = y;
Date_Month = m;
Date_Day = d;
}
void CDate::Display()
{
cout << Date_Year << "-" << Date_Month << "-" << Date_Day << endl;
}
#include "l3_07.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
CDate today(2025, 2, 5);//定义对象同时完成初始化
cout << "today is...\n";
today.Display();
today = CDate(2010, 3, 4);//定义无名对象
cout << "today is...\n";
today.Display();
return 0;
}
Executing constructor...today is...
2025-2-5
Executing constructor...today is...
2010-3-4

构造函数分类及调用

两种分类方式

  • 有参

  • 无参

三种分类方式

  • 括号法
  • 显示法
  • 隐式转换法
#include<iostream>
#include<string>
using namespace std;
class Person
{
int age;
public:
//普通构造函数
Person()
{
cout << "无参构造函数。\n";
}
Person(int a)
{
age = a;
cout << "有参构造函数。\n";
}
~Person()
{
cout << "析构。\n";
}
//拷贝构造函数
Person(const Person& p)
{
//将传入的人身上所有的属性拷贝到我身上。
age = p.age;
cout << "拷贝构造函数。\n";
}




};

void task1()
{
//括号法
//Person p1;//默认构造函数
//Person p2(10);//有参构造函数
//Person p3(p2);//拷贝构造函数
//默认构造函数不能写()
//显示法
Person p1;
Person p2 = Person(10);
Person p3 = Person (p2);
//Person(10);匿名对象
//cout << "a\n";
//隐式写法
Person p4 = 10;//等价于Person p4=Person(10)

}
int main()
{
task1();
return 0;
}
无参构造函数。
有参构造函数。
拷贝构造函数。
有参构造函数。
析构。
析构。
析构。
析构。

Author: T1g3r
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source T1g3r !
评论
  TOC