アプリ版:「スタンプのみでお礼する」機能のリリースについて

#include <stdlib.h>

/* 動物クラス */
class CAnimal{
public:
inttype;
voidinit(int);
voidprt(void);
};
/* 犬クラス */
class CDog : public CAnimal{
public:
voidinit(void);
};


/*------------ 動物クラス ------------*/
voidCAnimal::init(int t){
type = t;
}
voidCAnimal::prt(void){
printf("%d\n", type);
}

/*------------ 犬クラス ------------*/
voidCDog::init(void){
type = 10;
}


/*------------ メイン関数 ------------*/
void main(void)
{
CDogdog;
dog.init(1);
dog.prt();
}


メイン関数の「dog.init(1)」(下から3行目)でコンパイルエラーが出ます。継承元の関数はオーバーロードできないのでしょうか? 参考書にはそんなこと書いてありませんし、検索しても似たような事例が見つかりません。
初歩的なことですみませんが、どなたか教えていただけないでしょうか。

A 回答 (3件)

仮想関数、virtual、を調べてみて下さい。


例としては以下。
http://d.hatena.ne.jp/unageanu/20070916/1189933146
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございます。
上のURLを見たのですが、オーバーライドについて書かれていて、オーバーロードについては書かれていないような気がするのですが・・・。

お礼日時:2007/09/19 16:58

class CDog : public CAnimal{


public:
using CAnimal::init; //追加
void init(void);
};

としてみてください。

Effective C++ の50項によると継承元の関数を意図せず呼び出すことがないようにこのような仕様になっているらしい。

# 参考URLは検索して見つけた。
# Effective C++に書いてあるって言うから実際に見てみると確かにこの話題だった。

参考URL:http://ml.tietew.jp/cppll/cppll/article/6092
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、コンパイラの親切だったんですね。
usingを追加したらコンパイルできました。ありがとうございます。

お礼日時:2007/09/19 17:10

#1です。

よくオーバーライドの説明で見るサンプルでしたので(動物とか犬とか)、勘違いしました。
よく読まずで申し訳ありませんでした。
オーバーロードについて、勉強になりました。
個人的には、ややこしそうなので、あんまり使わないかな…^^;
    • good
    • 0
この回答へのお礼

いえいえ^^
わざわざありがとうございます

お礼日時:2007/09/19 17:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!