基底クラスでのpublicメンバの場合
基底クラスでpublicだったメンバは、派生クラスからは自分のクラスのメンバと
同じようにアクセスすることができます(^^)
class Food {
public:
int GetPrice() { return price; }
};
class Vegetable : public Food {
public:
void Vegetable::PricePrice() {
cout << "Price = " << GetPrice() << endl;
}
};
Vegetableクラスでは、基底クラスでpublicだったメンバ関数のGetPrice()に
アクセスしています。
基底クラスでpublicだったメンバは呼び出せるのです(^^)/
基底クラスでのprivateメンバの場合
基底クラスでprivateだったメンバは、派生クラスからはアクセスすることはできません。
class Food {
private:
int m_price;
};
class Vegetable : public Food {
public:
void Vegetalbe::PrintPrice() {
cout << "Price = " << m_price << endl;
}
};
基底クラスでprivateメンバにアクセスしようとすると、コンパイルエラーです。
test.cpp:12:10: error: extra qualification ‘Vegetable::’ on member ‘PrintPrice’ [-fpermissive]
test.cpp: In member function ‘void Vegetable::PrintPrice()’:
test.cpp:7:9: error: ‘int Food::m_price’ is private
test.cpp:13:31: error: within this context
アクセス指定子のprotected
protectedを使用した場合は、派生クラスからアクセスできても
他のクラスやグローバルな関数からアクセスできなくなります。(^^;)
class Food {
protected:
int m_price;
};
class Vegetable : public Food {
public:
void Vegetable::PrintPrice() {
cout << "Price = " << m_price << endl; //これはOK
}
};
int main(void)
{
Vegetable vgt;
vgt.PrintPrice();
vgt.m_price = 200;
:
例えば、こんな風に使おうとすると、コンパイルエラーになってしまいます...
そう、こんな感じで(*´Д`)
test.cpp:12:10: error: extra qualification ‘Vegetable::’ on member ‘PrintPrice’ [-fpermissive]
test.cpp: In function ‘int main()’:
test.cpp:7:9: error: ‘int Food::m_price’ is protected
test.cpp:22:9: error: within this context
アクセス指定子は、要注意ですね(^^;)
たまに、設計の意図を汲み取らず、これ public にしたいなぁという事はあるのですが...
今日の名言
心を傷つける鎖を断ち切り、悩みをきっぱりと捨て去った者は、幸福なるかな。
オウィディウス
明日を耐え抜くために必要なものだけ残して、あらゆる過去を閉め出せ。
サー・ウィリアム・オスラー
過ぎ去ったものは、もはや再び帰らない。賢者は現在と未来について考えるだけで
手一杯であるから、過ぎ去った事柄をくよくよ考えている暇がない。
フランシス・ベーコン
ジョージ・ハーバードは「夜は魂を脱ぎ捨てよ」と言っている。これは内省を
しろというのではなく、服を脱ぐようにすっぽりと魂を脱ぎ捨てるのだ。その
一日をなすこともなく過ごした罪も、誤りを犯した罪も、ともに脱ぎ捨てれば、
翌朝新しい命を持った新しい人間として、目覚めるだろう。
サー・ウィリアム・オスラー
恐ろしい悪夢に比べれば、現在の恐怖のほうがまだましだ。
ウィリアム・シェイクスピア