目录
- 一、程序及输出
- 1.1 构造函数的分类
- 1.2 构造函数的调用
- 1.2.1 括号法
- 1.2.2 显式法
- 1.2.3 隐式法
- 二、分析与总结
一、程序及输出
1.1 构造函数的分类
#include<iostream>
using namespace std;
//构造函数分类
//按照参数分类: 无参构造(默认构造函数) 和 有参构造
//按照类型分类: 普通构造函数 拷贝构造函数
class Person
{
public:
Person()
{
cout << "Person的默认构造函数调用" << endl;
}
Person(int age)
{
m_Age = age;
cout << "Person的有参构造函数调用" << endl;
}
//拷贝构造函数
Person(const Person &p )
{
cout << "Person的拷贝构造函数调用" << endl;
m_Age = p.m_Age;
}
int m_Age;
};
void test01()
{
Person p1;
Person p2(10);
Person p3(p1);
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
输出:
1.2 构造函数的调用
1.2.1 括号法
#include<iostream>
using namespace std;
class Person
{
public:
Person()
{
cout << "Person的默认构造函数调用" << endl;
}
Person(int age)
{
m_Age = age;
cout << "Person的有参构造函数调用" << endl;
}
//拷贝构造函数
Person(const Person &p )
{
cout << "Person的拷贝构造函数调用" << endl;
m_Age = p.m_Age;
}
int m_Age;
};
void test01()
{
Person p;
//1、括号法
Person p1(10);
Person p2(p);
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
与上面代码一样,输出:
注意
:不要用括号法 调用无参构造函数 Person p3(); 编译器认为代码是函数的声明
//test01单独加入
Person p3();
输出:
1.2.2 显式法
添加析构函数
#include<iostream>
using namespace std;
class Person
{
public:
Person()
{
cout << "Person的默认构造函数调用" << endl;
}
Person(int age)
{
m_Age = age;
cout << "Person的有参构造函数调用" << endl;
}
//拷贝构造函数
Person(const Person &p )
{
cout << "Person的拷贝构造函数调用" << endl;
m_Age = p.m_Age;
}
//析构函数
~Person()
{
cout << "Person的析构函数调用" << endl;
}
int m_Age;
};
void test01()
{
//2、显示法
Person p3 = Person(10); //有参构造
Person p4 = Person(p3); //拷贝构造
Person(10); //匿名对象 特点: 当前行执行完后 立即释放
cout << "aaa" << endl;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
输出:
1.2.3 隐式法
#include<iostream>
using namespace std;
class Person
{
public:
Person()
{
cout << "Person的默认构造函数调用" << endl;
}
Person(int age)
{
m_Age = age;
cout << "Person的有参构造函数调用" << endl;
}
//拷贝构造函数
Person(const Person &p )
{
cout << "Person的拷贝构造函数调用" << endl;
m_Age = p.m_Age;
}
//析构函数
~Person()
{
cout << "Person的析构函数调用" << endl;
}
int m_Age;
};
void test01()
{
//3、隐式法
Person p5 = 10; //Person p5 = Person(10);
Person p6 = p5;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
输出:
二、分析与总结
默认构造函数
(Default Constructor):
默认构造函数是没有任何参数的构造函数,它可以在创建对象时自动调用,用于执行对象的默认初始化。如果没有显式定义任何构造函数,编译器会自动生成默认构造函数。如果定义了带参数的构造函数,编译器将不会自动生成默认构造函数,除非显式定义了。
带参数的构造函数
(Parameterized Constructor):
带参数的构造函数接受一个或多个参数,用于在创建对象时进行初始化。通过不同的参数列表,可以定义多个重载的带参数构造函数,用于满足不同的初始化需求。
拷贝构造函数
(Copy Constructor):
拷贝构造函数是一种特殊的构造函数,它接受一个同类型的对象作为参数,用于创建一个新对象并将参数对象的值拷贝给新对象。拷贝构造函数通常用于对象的复制和传递。