欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > C++基础知识:构造函数的分类和调用,有参构造和无参构造,有参构造和无参构造,三种调用方式:括号法,显示法,隐式转换法,以及相关代码演示和注意事项

C++基础知识:构造函数的分类和调用,有参构造和无参构造,有参构造和无参构造,三种调用方式:括号法,显示法,隐式转换法,以及相关代码演示和注意事项

2024/10/24 6:32:42 来源:https://blog.csdn.net/zxn275266/article/details/140833369  浏览:    关键词:C++基础知识:构造函数的分类和调用,有参构造和无参构造,有参构造和无参构造,三种调用方式:括号法,显示法,隐式转换法,以及相关代码演示和注意事项

1.构造函数的分类及调用:

2.两种分类方式:


按参数分为: 有参构造和无参构造
按类型分为:有参构造和无参构造


3.三种调用方式:


括号法
显示法
隐式转换法

2.调用方法代码演示

1.括号法代码演示:
#include<iostream>using namespace std;//1.构造函数的分类和调用//分类
//按照参数分类-----无参构造(也称之为默认构造)和有参构造
//按照类型分类-----普通构造和拷贝构造class Person {
public:/*无参构造*/Person() {cout << "Person的无参构造函数调用" << endl;}/*有参构造*/Person(int a) {age = a;cout << "Person的有参构造函数调用" << endl;}//拷贝构造函数(简单来说就是克隆)Person(const Person& p) {//要加const进行限制,并且要引用age = p.age;//将传入的人身上的所有属性,拷贝到我身上(也就是调用这个构造函数的对象身上)cout << "Person的有参拷贝构造函数调用" << endl;}int age;~Person(){cout << "Person的析构函数调用" << endl;}
};//调用
void test01() {//1.括号法Person p1;//默认构造函数的调用Person p2(10);//有参构造函数Person p3(p2);//拷贝构造函数//拷贝构造函数的用途cout << "p2的年龄为:" << p2.age << endl;//因为是拷贝所以p3的年龄也为10cout << "p3的年龄为:" << p3.age << endl;//注意调用默认构造函数的时候不要加()//Person p1();//编译器会认为这是一个函数声明,不会认为在创建对象}int main() {test01();system("pause");return 0;
}
1.1括号法代码效果:

2.显示法:
#include<iostream>using namespace std;//1.构造函数的分类和调用//分类
//按照参数分类-----无参构造(也称之为默认构造)和有参构造
//按照类型分类-----普通构造和拷贝构造class Person {
public:/*无参构造*/Person() {cout << "Person的无参构造函数调用" << endl;}/*有参构造*/Person(int a) {age = a;cout << "Person的有参构造函数调用" << endl;}//拷贝构造函数(简单来说就是克隆)Person(const Person& p) {//要加const进行限制,并且要引用age = p.age;//将传入的人身上的所有属性,拷贝到我身上(也就是调用这个构造函数的对象身上)cout << "Person的有参拷贝构造函数调用" << endl;}int age;~Person(){cout << "Person的析构函数调用" << endl;}
};//调用
void test01() {//2.显示法Person p1;//默认构造是一样的Person p2 = Person(10);//有参构造Person p3 = Person(p2);//有参构造//注意事项1:Person(10);//匿名对象,特点:当前行执行结束后,系统会立即回收掉匿名对象//2.注意事项2;//不要利用拷贝构造函数 初始化匿名函数//下面这个编译器会认为是Person (p3)===Person p3;//对象申明//Person(p3);//会报错cout << "打印线———————" << endl;
}int main() {test01();system("pause");return 0;
}
2.1显示法代码执行结果:

3.隐式转换法:
#include<iostream>using namespace std;//1.构造函数的分类和调用//分类
//按照参数分类-----无参构造(也称之为默认构造)和有参构造
//按照类型分类-----普通构造和拷贝构造class Person {
public:/*无参构造*/Person() {cout << "Person的无参构造函数调用" << endl;}/*有参构造*/Person(int a) {age = a;cout << "Person的有参构造函数调用" << endl;}//拷贝构造函数(简单来说就是克隆)Person(const Person& p) {//要加const进行限制,并且要引用age = p.age;//将传入的人身上的所有属性,拷贝到我身上(也就是调用这个构造函数的对象身上)cout << "Person的有参拷贝构造函数调用" << endl;}int age;~Person(){cout << "Person的析构函数调用" << endl;}
};//调用
void test01() {//3.隐式转换法Person p4 = 10;//相当于Person p4 =Person(10) 有参构造Person p5 = p4;//拷贝构造}int main() {test01();system("pause");return 0;
}
3.1隐式转换法代码执行结果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com