我正在学习c ++,我的老师写下这段代码:
Tpoint
和TObjetGraphique
是两个独立的类中声明为
origine
是Tpoint
private
的{{1}}类型的对象TObjetGraphique
我想知道为什么我们不会写:
TPoint TObjetGraphique::getOrigine() const
{return (TPoint(origine));}
有什么不同吗?
答案 0 :(得分:6)
教师代码中的演员阵容毫无意义
TPoint TObjetGraphique::getOrigine() const {return (TPoint(origine));} // ^^^^^^^ ^ You can just omit this as proposed
假设origine
的类型为TPoint
。
如果origine
的类型可以以任何方式转换为TPoint
,则显式转换也无意义。
如果出现该语法的原因,则TPoint
具有构造函数声明,如
struct SomethingElse {
int a_;
int b_;
explicit SomethingElse(int a, int b) : a_(a), b_(b) {}
SomethingElse() = default;
};
class TPoint {
public:
explicit TPoint(SomethingElse rhs) : x_(rhs.a_), y_(rhs.b_) {
std::cout << "TPoint::TPoint(const SomethingElse& rhs)" << std::endl;
}
private:
int x_;
int y_;
};
int main() {
SomethingElse something;
// TPoint pt1({2,3}); // <<<<<<<<<< Fails
TPoint pt2(something);
}
看起来很不寻常,但最终会阻止TPoint
无意中从SomethingElse
实例化(请参阅Live Demo)。
答案 1 :(得分:3)
如果origine
是TPoint
,则没有区别。
如果origine
不是TPoint
,那么它将调用任何TPoint
或[{1}}
origine