class A
{
protected:
int m_a;
int m_b;
};
class B: public A
{
};
m_a
クラスBではプライベートにしたいです。それを行うために次の正しい方法を行いますか
class B:public A
{
private:
int m_a;
};
これは2つのコピーになりm_a
ませんか?
class A
{
protected:
int m_a;
int m_b;
};
class B: public A
{
};
m_a
クラスBではプライベートにしたいです。それを行うために次の正しい方法を行いますか
class B:public A
{
private:
int m_a;
};
これは2つのコピーになりm_a
ませんか?
メンバーのアクセス制御を調整する正しい方法は、using
宣言を使用することです。
class B: public A {
private:
using A::m_a;
}
書くint m_a;
だけで実際にのコピーが2つになり、派生クラスはを書くことでのコピーm_a
にアクセスできます。A
m_a
A::m_a
の影に。m_a
_ これは別のデータメンバーであるため、クラスBには実際には3つの:、、 およびがあります。にプライベートアクセスを取得する方法は、でプライベートに「使用」することです。class B
class A
ints
A::m_a
A::m_b
B::m_a
m_a
B
A::m_a
class B
class A {
int m_a;
};
class B: public A {
using A::m_a;
};
class C : public B {
void foo() {
m_a++; // ERROR!
}
};
このコードは、クラスBに3つのintストレージを作成します。
m_aの宣言は新しい変数を作成します-宣言は異なるスコープにあるため、ここではc ++で再宣言の問題はありません。より具体的には、A::m_aはB::m_aと同じではありません。