C++之隐式构造函数
先来看一段很简单的程序。
这是一个简单的类,拥有两个私有成员,有两个构造函数用来初始化私有成员,还有一个输出信息的方法。
注意下面的类对象a、b的实例化过程。
#include <iostream>
using namespace std;
class Person
{
private:
string My_name;
int My_age;
public:
Person(string name)
:My_name(name), My_age(-1){}
Person(int age)
:My_name("unknow"), My_age(age){}
void saySth()
{
cout << "my name is " << My_name << ", age is " << My_age << endl;
}
};
int main()
{
Person a("ganlan");
Person b(22);
a.saySth();
b.saySth();
return 0;
}
下面展示一种奇怪的实例化方法。
#include <iostream>
using namespace std;
class Person
{
private:
string My_name;
int My_age;
public:
Person(string name)
:My_name(name), My_age(-1){}
Person(int age)
:My_name("unknow"), My_age(age){}
void saySth()
{
cout << "my name is " << My_name << ", age is " << My_age << endl;
}
};
int main()
{
Person a = string("ganlan");
Person b = 22;
a.saySth();
b.saySth();
return 0;
}
先忽略第23行,注意第24行,b的类型是Person类型,怎么可以被int类型赋值呢?
其实这是“隐式构造函数”搞的鬼,可以理解为同第一个程序那样调用构造函数初始化成员变量。
第23行比较特殊一些,需要转化为string类型才能使用该字符串。
隐式构造函数,建议大家会用即可,认识就行。