我想調用副本構造函數中的存取函數,但它不工作。這裏是我的問題的一個例子:複製構造函數和調用函數
啊
class A {
public:
//Constructor
A(int d);
//Copy Constructor
A(const A &rhs);
//accessor for data
int getData();
//mutator for data
void setData(int d);
private:
int data;
};
A.cpp
#include "A.h"
//Constructor
A::A(int d) {
this->setData(d);
}
//Copy Constructor
A::A(const A &rhs) {
this->setData(rhs.getData());
}
//accessor for data
int A::getData() {
return data;
}
//mutator for data
void A::setData(int d) {
data = d;
}
當我嘗試編譯,我得到以下錯誤:
error: passing 'const A' as 'this' argument of 'int A::getData()' discards qualifiers
如果我將rhs.getData()
更改爲rhs.data
,然後構造函數正常工作。我不允許在複製構造函數中調用函數嗎?有人能告訴我我做錯了什麼嗎?
您不需要爲此使用訪問器。一個類自動成爲它自己的朋友。因此,對象X可以讀取對象Y的私有成員,如果它們是相同的類型。假定代碼的作者知道他在做什麼和實現細節,因此不需要保護自己。 – 2010-04-18 09:25:56