基本クラスのメンバにアクセスできないのですが – プログラミング – Home

基本クラスのメンバにアクセスできないの...
 
通知
すべてクリア

[解決済] 基本クラスのメンバにアクセスできないのですが


SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

以前、ある人から質問された事がありまして、問題自体は解決したのですが、
どうしても気になっている事があります。
というのは、

class A{
public:
void func() { cout << A::func() << endl; }
};

class B : public A{
public:
void func(int i) { cout << B::finc(int) << endl; }
};

int main()
{
B obj;

obj.func(); // <- エラーになる

return 0;
}

つまり基本クラスのメンバ関数と同じ名前の関数を派生クラスでオーバーロードしている
のですがどうもエラーが出ます。
対処法としては
  ((A)obj).func()
とするか、Bに
void func() { A::func(); }
を加えるかで何とかなるのは分かっているのですが、これってVC++6のバグなのでしょう
か?
エラーメッセージは
'func' : 関数が不正な 0 個の実引数をともなって呼び出されました。
です。

まぁ、こんな継承する事自体あまりないのですけどね・・・


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> これってVC++6のバグなのでしょうか?

バグではありません。言語仕様です。


返信引用
yukihiro
 yukihiro
(@yukihiro)
ゲスト
結合: 23年前
投稿: 24
 

そんなときは
obj.A::func()
と書きます。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 22年前
投稿: 830
 

class B: public A {
using A::func;
...
};
とする手もあります。


返信引用
SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

みなさん、お答えありがとうございます。
なんと言語仕様でしたか。それは知りませんでした。
私もまだまだ修行がたりませんねぇ。
obj.A::func()って書き方は分かりやすくてGoodです。
using A::funcはちょっと意表をつかれたって感じかも(笑)

やはりちゃんと言語使用には目を通した方がよさそうですね。
でも昨日の int[0]とかこれって今はやりのトリビアってやつかも。
思わずへぇって頷いちゃったし。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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