什么是方法返回的幕后?

时间:2017-12-27 21:19:51

标签: c++

我正在学习c ++,我的老师写下这段代码:

  
      
  • TpointTObjetGraphique是两个独立的类
  •   
  • origineTpoint

    中声明为private的{​​{1}}类型的对象
    TObjetGraphique
  •   

我想知道为什么我们不会写:

 TPoint TObjetGraphique::getOrigine() const
    {return (TPoint(origine));}

有什么不同吗?

2 个答案:

答案 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)

如果origineTPoint,则没有区别。

如果origine不是TPoint,那么它将调用任何TPoint或[{1}}

的运算符origine