隐式的类类型转换 :
我们先定义一个类:
class Person{
public:
Person()=default;
Person(const std::string &s_name):name(s_name){}
Person(std::istream&){}
public:
Person &is_samename(const Person&);
private:
std::string name;
};
is_samename()函数的定义:
Person& Person::is_samename(const Person&){
/*省略细节*/
return *this;
}
我们用string实参调用Person的is_samename成员,调用时,编译器会用给定的string自动创建Person临时对象,然后传递给is_samename,当is_samename完成后,我们便不能再访问该对象。
注意:隐式类类型转换只允许一次转换
Person person;
std::string newName="lao zi";
person.is_samename(newName); //从string类型转换到Person类型
person.is_samename("lao zi"); //错误:这种方法使用了两种转换规则 "lao zi"->string,string->Person
person.is_samename(std::string("lao zi")/*Person("lao zi")*/); //正确
类似的,我们把cin转换成Person类型:
Person person1;
person.is_samename(std::cin);
第一篇博客学习记录,希望我会坚持下去!!!