private アクセス – プログラミング – Home

通知
すべてクリア

[解決済] private アクセス


arashi
 arashi
(@arashi)
ゲスト
結合: 14年前
投稿: 5
Topic starter  

Win98SE vc++6.0

class Hoge
{
private:
int m_pow;
Hoge *m_p;

public:
Hoge()
{
m_p = new Hoge;
m_p->m_pow; // ポイント
}

~Hoge()
{
delete m_p;
}
};

私が理解しているクラスの private のアクセス方法です。

1.メンバ値、メンバ関数は、外部からはアクセス出来ない。
2.自分自身(this)のクラスからは、アクセス出来る。

なぜ、m_pow は private なのに m_p->m_pow は、アクセス出来るの?
よろしくお願いします。


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

>1.メンバ値、メンバ関数は、外部からはアクセス出来ない。

正しくは、「自クラス」と「friend」以外からはアクセスできなのですね。
m_pは、実行時には自分のインスタンスではありませんが、
自クラスなのでOKです。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

既にレスがついていますが、

クラスとインスタンスは分けて考える必要があります。
クラスを使っていると同じクラスなのにメンバー変数の値が
違うとか逆にインスタンスは違うのにとか話が出てきますが、
この辺はクラスとインスタンスの区別がうまく出来ていない
所為だと思います。
この辺は、C++言語を使う上で付いてまわる話なので
良く理解しておく事をお勧めします。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> 2.自分自身(this)のクラスからは、アクセス出来る。
Hoge()は「自分自身のクラス」の関数だからアクセスできていいわけです。

# あれ? このクラスはコンストラクトした時点で新たにインスタンスを作成して、
# その結果、またコンストラクタが呼ばれて、...
# まあ、意味のないコードなんでしょうけど。


返信引用
arashi
 arashi
(@arashi)
ゲスト
結合: 14年前
投稿: 5
Topic starter  

どうも三人の方、御返信ありがとうございます。

まず、このクラスはご指摘のように実験クラスとして作成した物ですので
意味のないコードですが、無限生成 ( new ) とは気づきませんでした。
御指摘、ありがとうございます。

最終確認させて頂くと、私は、今まで自クラスは、this-> のような形式で、
自分自身を参照できるのであれば private アクセスはできると思っていましたが、
Hoge 型クラスのメンバ関数内で Hoge 型を参照するのであれば、
void Hoge::Test( Hoge *pHoge ) pHoge->m_pow のように
private もアクセスできると言う考え方で宜しいのでしょうか。?

ちなみに、誤解されたらあれなので派生されたクラスでは、継承元の基底クラスの
private なメンバは、アクセスはできないと言うことは知っております。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 14年前
投稿: 40
 

アクセス修飾子(private/protected/public)はインスタンスに対してではなく、クラス
に対して適用されます。
privateは自分自身(インスタンス)ではなく、自分の属するクラス内でアクセス可能てこ
とです。


返信引用
arashi
 arashi
(@arashi)
ゲスト
結合: 14年前
投稿: 5
Topic starter  

なるほど、私は今まで一方的にインスタンスに対してのアクセスで考えており、
クラス( 設計図 )に対してのアクセスで、当てはめて考えれば理解することが
できました。

どうもありがとう御座いました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました