2017-05-12 5 views
1

なぜそれが私の望むように動作しないのか分かりませんが、私はインターネットを見ていますが、良い解決策はありませんでした。コピーコンストラクタが呼び出された理由、オブジェクトの参照のみを返すとき

Pointクラス:

class Point 
{ 
public: 
    Point(const Point &) { 
     cout << "copy constructor was called" << endl; 
    } 
    Point(int x, int y) : x(x), y(y) { 
    } 
    void setX(int x) {this->x = x;} 
    void setY(int y) {this->y = y;} 
    int getX() const { return x; } 
    int getY() const { return y; } 
private: 
    int x; 
    int y; 
}; 

Circleクラス:

class Circle 
{ 
private: 
    int rad; 
    Point &location; 
public: 
    Circle(int radius, Point &location) : rad(radius), location(location) {} 
    int getRad() { return rad; } 
    Point & getLocation() { return location; } 
}; 

使用:

int main() { 
    Point p(23, 23); 
    Circle c(12, p); 

    Point p1 = c.getLocation(); 
    p1.setX(200); 

    cout << p.getX() << endl; // prints 23, which I want to be 200 
           // copy constructor was called 

    system("pause"); 
    return 0; 
} 
+3

溶液は、このような基準としてp1を宣言することであろう。 – WhozCraig

+0

'Point&p1 = c.getLocation();' – xander

+0

@WhozCraig hmmmmm .......私はC++を初めて使っています。どうもありがとうございました! –

答えて

4

folloでウィングライン:

Point p1 = c.getLocation(); 

p1はリファレンスではないので、基本的には、このようにコピーコンストラクタを呼び出し、getLocation()によって返された参照されたオブジェクトをコピーしています。 `p1`は*参照*されていないため

Point& p1 = c.getLocation(); 
+0

ありがとうございます!私はJavaから来ているので、そのような種類のポイントはありません。したがって、C++では、よく学ばなければならないことがたくさんあります。 –

関連する問題