💪 专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《图像增强》
📝《模型优化》
📝《模型实战部署》
📝《图像配准融合》
📝《数据集》
📝《高效助手》
📝《C++》
📝《Qt》
目录
一、构造函数的分类
1.1 无参构造函数
1.1.1 作用
当对象创建时未传递任何参数时自动调用。
用于初始化默认值。
1.1.2 代码
无参构造函数的代码见下:
// 无参构造
Person()
{
cout << "Person的无参构造函数调用!" << endl;
}
1.2 有参构造函数
1.2.1 作用
用于在对象创建时传递初始化参数。
可以定义多个版本(函数重载)。
1.2.2 代码
有参构造函数的代码见下:
// 有参构造
Person(int a)
{
age = a;
cout << "Person的有参构造函数调用!" << endl;
}
1.3 拷贝构造函数
1.3.1 作用
用于创建一个新对象并将另一个对象的值拷贝到新对象。
通常由编译器提供默认实现,但在某些情况下需要自定义。
1.3.2 代码
拷贝构造函数的代码见下:
// 拷贝构造函数
Person(const Person& p)
{
// 将传入的人身上的所有属性,拷贝到我身上
age = p.age;
cout << "调用拷贝构造函数!" << endl;
}
二、构造函数的调用
2.1 括号法
2.1.1 使用
使用小括号直接传参调用构造函数。
2.1.2 代码
括号法调用构造函数的示例代码见下:
//1、括号法
Person p1; // 默认构造函数的调用
Person p2(20); // 因为传了一个数值,所以会调用有参构造函数
Person p3(p2); // 调用拷贝构造函数
cout << "p2的年龄为:" << p2.age << endl;
cout << "p3的年龄为:" << p3.age << endl;
2.1.3 注意事项
调用默认构造函数时候,不要加()
因为Person p1();代码,编译器会认为是一个函数的声明,不会认为在创建对象。
2.2 显示法
2.2.1 使用
用显式的 = 和构造函数调用初始化对象。
2.2.2 代码
显示法调用构造函数的示例代码见下:
//2、显示法
Person p1;
Person p2 = Person(10); // 调用有参构造
Person p3 = Person(p2); // 调用拷贝构造
2.2.3 注意事项
Person(p3);
不要利用拷贝构造函数,初始化匿名对象,编译器会认为Person(p3) == Person p3。
2.3 隐式法
2.3.1 使用
直接赋值或传入对象。
2.3.2 代码
隐式法调用构造函数的实例代码见下:
//3、隐式转换法
Person p4 = 10; // 相当于 写了 Person p4 = Person(10);
Person p5 = p4; // 拷贝构造函数的调研
三、完整代码
上面构造函数的分类和调用方法,完整代码见下:
#include<iostream>
using namespace std;
#include <ctime>
#include <string>
// 1、构造函数的分类及调用
// 分类
// 按照参数分类 无参构造(默认构造)和有参构造
// 按照类型分类 普通构造 拷贝构造
class Person
{
public:
// 构造函数
// 无参构造
Person()
{
cout << "Person的无参构造函数调用!" << endl;
}
// 有参构造
Person(int a)
{
age = a;
cout << "Person的有参构造函数调用!" << endl;
}
// 拷贝构造函数
Person(const Person& p)
{
// 将传入的人身上的所有属性,拷贝到我身上
age = p.age;
cout << "调用拷贝构造函数!" << endl;
}
// 析构函数
~Person()
{
cout << "析构函数的调用!" << endl;
}
int age;
};
// 调用
void test01()
{
//1、括号法
Person p1; // 默认构造函数的调用
Person p2(20); // 因为传了一个数值,所以会调用有参构造函数
Person p3(p2); // 调用拷贝构造函数
cout << "p2的年龄为:" << p2.age << endl;
cout << "p3的年龄为:" << p3.age << endl;
// 注意事项
// 调用默认构造函数时候,不要加()
// 因为下面这行代码,编译器会认为是一个函数的声明,不会认为在创建对象
// Person p1();
//2、显示法
//Person p1;
//Person p2 = Person(10); // 调用有参构造
//Person p3 = Person(p2); // 调用拷贝构造
// Person(10); // 匿名对象,特点:当前执行结束后,系统立即回收掉匿名对象
// cout << "aaaa" << endl;
// 注意事项2
// 不要利用拷贝构造函数 初始化匿名对象,编译器会认为Person(p3) == Person p3;对象的申明
// Person(p3);
//3、隐式转换法
Person p4 = 10; // 相当于 写了 Person p4 = Person(10);
Person p5 = p4; // 拷贝构造函数的调研
}
int main()
{
test01();
system("pause");
return 0;
}
运行上面代码的输出见下:
四、总结
已经就是C++中构造函数的分类和三种调用方法,希望能帮到你!本人参考学习的是黑马程序员,仅作为笔记记录。
感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖
关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!