举个例子
#include <iostream>
#include <string>
using String = std::string;
class Entity{
private:
String m_Name;
int m_Age;
public:
Entity(const String& name)
:m_Name(name), m_Age(-1) {}
Entity(int age)
: m_Name("UnKnown"), m_Age(age) {}
};
int main()
{
Entity a("InfiHeart");
Entity b(22);
std::cin.get();
}
定义一个类,并写两个简单的构造函数,在主函数中可以用上述方法创建两个实例,也可以用下面的方法创建
int main()
{
Entity a = String("InfiHeart");
Entity b = 22;
std::cin.get();
}
这里直接让字符串和整形的数字等于类,却可以创建成功,这就是隐式转换或隐式构造函数。它隐式的把"InfiHeart"或22转化为Entity对象,因为其中包含接受字符串或整数的构造函数。
另一个例子是
void PrintEntity(const Entity& entity)
{
//printing
}
int main()
{
PrintEntity(22);
std::cin.get();
}
如果定义一个传入Entity
对象的函数,可以直接调用函数并传入整形参数。
但如果使用PrintEntity("InfiHeart");
则会报错,原因是隐式转换只允许发生一次,这里的"InfiHeart"
是char
数组,距离创建Entity
对象还需一次转换。
explicit关键字
如果只想用显式的格式创建对象,那么可以在构造函数前面加上explicit
关键字,这意味着这个构造函数不会隐式转换。
教程来源:The Cherno C++ 教程
标签:22,int,18,C++,Entity,InfiHeart,隐式,构造函数 From: https://blog.csdn.net/m0_59669215/article/details/141232887