#include <iostream>
using namespace std;
class R {
protected:
int a;
public:
int read(void) {
return a;
}
};
class RW : public R {
public:
void write(int _a) {
a = _a;
}
};
int main(void) {
int a;
R *r = (R *)&a;
RW *rw = (RW *)&a;
rw->write(1);
cout << dec << r->read() << endl;
cout << dec << rw->read() << endl;
return 0;
}
我想制作一個只能讀取的類(R 類)和一個可以讀寫的類(RW 類)。有什么理由我不應該在 oop 中這樣做嗎?還有什么理由不在這里使用“受保護”?請幫助我,感謝您的任何回復!
PS我不想定義重復的'private int a;' 在兩個類上,因為'int a in class RW'的偏移量和'class RW'的大小不再與'class R'相同。
uj5u.com熱心網友回復:
有什么理由不在這里使用“受保護”?
protected有時不鼓勵成員變數,而支持protected訪問private成員變數的成員函式-a如果private在R. 您可以添加一個protected成員函式來寫入它。
class R {
public:
int read() const { // not `void` and add `const`
return a;
}
protected:
void write(int A) {
a = A;
}
private:
int a;
};
class RW : public R {
public:
void write(int A) {
R::write(A);
}
};
如果沒有任何附加的驗證R::write,上面基本上沒有與您的代碼,但是a是private。
你的原始版本沒有錯。可以在這里看到:您應該使用受保護的成員變數嗎?沒有明確的“不,你永遠不應該使用protected成員變數”。
有人可能會爭辯說,如果它們只是protected,則可以只繼承該類并將它們視為public,如果更改此類成員變數不需要任何型別的任何驗證,則可以從它們public開始。人們將不得不逐案查看。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395604.html
