简介:C++的构造函数用于对象的初始化,然后将初始化之后的对象赋值给一个变量。下面将要介绍调用类构造函数的几种方法。
1、括号法
括号法的语法形式就是:在变量名后面加上括号进行调用,括号里面必须存在参数然后与对应的重载构造函数进行对应。
#include<iostream>
using namespace std;
class Person{
public:
int age;
Person(){
cout<<"默认构造"<<endl;
};//默认构造
Person(int age,string name):age(age),name(name){
this->age=age;
this->name=name;
cout<<"带参数构造"<<endl;
}
Person(const Person& p):age(p.age),name(p.name){
cout<<"拷贝构造"<<endl;
}
~Person(){
cout<<"默认析构"<<endl;
}
private:
string name;
};
int main(){
Person p;//括号法,括号加在变量名p的后面,这个p对象在栈里面
p.age=123;
Person p1(p);//括号法的拷贝构造函数,同样是是变量名p1(),用于调用对应的重载构造函数
cout<<p.age<<endl;
Person p3();//这个是函数声明的语法
};
2、显式法
显式法就是手动地调用构造函数名称进行对象初始化。
#include<iostream>
using namespace std;
class Person{
public:
int age;
Person(){
cout<<"默认构造"<<endl;
};//默认构造
Person(int age,string name):age(age),name(name){
this->age=age;
this->name=name;
cout<<"带参数构造"<<endl;
}
Person(const Person& p):age(p.age),name(p.name){
cout<<"拷贝构造"<<endl;
}
~Person(){
cout<<"默认析构"<<endl;
}
private:
string name;
};
int main(){
Person p = Person();//手动调用默认构造
Person p1 = Person(12,"mmd");//手动调用带参构造
Person p3 = Person(p1);//手动调用带参构造
};
3、隐式转换法
这种做法就是在显式调用法的基础上进行精简,省略类名。
#include<iostream>
using namespace std;
class Person{
public:
int age;
Person(){
cout<<"默认构造"<<endl;
};//默认构造
Person(int a){
age=a;
cout<<"默认构造"<<endl;
};
Person(int age,string name):age(age),name(name){
this->age=age;
this->name=name;
cout<<"带参数构造"<<endl;
}
Person(const Person& p):age(p.age),name(p.name){
cout<<"拷贝构造"<<endl;
}
~Person(){
cout<<"默认析构"<<endl;
}
private:
string name;
};
int main(){
Person p = {};//隐式转换调用默认构造
Person p1 = 12;//隐式转换调用带参构造Person(int a)
Person p3 = p1;//拷贝构造隐式转换
};