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;
}