创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
c语言内容💖:
专栏:c语言之路重点知识整合
一、按参数分
- 有参构造
有参构造是指一个类中可以接受参数的构造函数。
它允许在创建对象时向构造函数传递参数,以初始化对象的成员变
有参构造使得对象在创建时可以具有不同的初始状态。
- 无参构造
无参构造是指一个类中没有参数的构造函数。
通过无参构造函数来创建对象,该构造函数不接收任何参数并按照默认的方式初始化对象的成员变量。
当对象的成员变量都有默认值或初始化逻辑不需要额外的参数时,可以使用无参构造函数来创建对象。
class Person
{
public:
int age;
//无参(默认)构造函数
Person()
{
cout << "无参-构造函数" << endl;
}
//有参构造函数
Person(int a)
{
age = a;
cout << "有参-构造函数" << endl;
}
//析构函数
~Person() {
cout << "析构函数" << endl;
}
};
二、按类型分
- 普通构造
普通构造函数在创建对象时初始化对象的成员变量,并返回一个新的对象
- 拷贝构造
拷贝构造接受同一类的对象作为参数,并创建一个新的对象,新对象的成员变量与原始对象相同
拷贝构造函数能够确保新对象具有独立的数据副本而不是共享原始对象的引用
class Person
{
public:
int age;
// 普通构造函数
Person()
{
cout << "普通构造函数" << endl;
}
//拷贝构造函数
Person(const Person& p)
{
age = p.age;
cout << "拷贝构造函数" << endl;
}
//析构函数
~Person() {
cout << "析构函数" << endl;
}
};
普通构造函数和拷贝构造函数使用不同的参数类型
普通构造用于创建新对象并初始化其成员变量
拷贝构造用于基于现有对象创建新对象的副本
三种调用方式:
-
括号法
-
显式法
-
隐式转换法
//调用无参构造函数
void test01()
{
Person p; //调用无参构造函数
}
//调用有参的构造函数
void test02()
{
//括号法 常用
Person p1(10);
//error:Person p2(); 调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明
//显式法
Person p2 = Person(10);
Person p3 = Person(p2);
//Person(10)单独写就是匿名对象 当前行结束之后,马上析构
//隐式转换法
Person p4 = 10; // Person p4 = Person(10);
Person p5 = p4; // Person p5 = Person(p4);
//Person p5(p4); 不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明
}
int main()
{
test01();
test02();
return 0;
}
总结
构造函数的分类
- 按照参数分类分为
- 有参构造
- 无参构造(默认构造函数)
- 按照类型分类分为
- 普通构造
- 拷贝构造
构造函数的调用
-
括号法(常用)
-
显式法
-
隐式转换法
文章全部代码
#include<iostream>
using namespace std;
class Person
{
public:
int age;
无参(默认)构造函数
//Person()
//{
// cout << "无参-构造函数" << endl;
//}
//有参构造函数
Person(int a)
{
age = a;
cout << "有参-构造函数" << endl;
}
// 普通构造函数
Person()
{
cout << "普通构造函数" << endl;
}
//拷贝构造函数
Person(const Person& p)
{
age = p.age;
cout << "拷贝构造函数" << endl;
}
//析构函数
~Person() {
cout << "析构函数" << endl;
}
};
void test01()
{
Person p; //调用无参构造函数
}
//调用有参的构造函数
void test02()
{
//括号法 常用
Person p1(10);
//error:Person p2(); 调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明
//显式法
Person p2 = Person(10);
Person p3 = Person(p2);
//Person(10)单独写就是匿名对象 当前行结束之后,马上析构
//隐式转换法
Person p4 = 10; // Person p4 = Person(10);
Person p5 = p4; // Person p5 = Person(p4);
//Person p5(p4); 不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明
}
int main()
{
test01();
test02();
return 0;
}
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |