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的年龄也为10
cout << "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;
}