[cppll:9400] Re: オーバーロードかオーバーライドか?
Tietew です。
On Wed, 13 Aug 2003 06:41:52 +0900
In article <00b401c3611a$a76ba700$55ac723d@default>
[[cppll:9394] Re: オーバーロードかオーバーライドか?]
中田 俊介 <nakatasyunsuke@...> wrote:
> | class Base
> | {public: char *getName () {return "Base" ;}} ;
> |
> | class Derived : public Base
> | {public: char *getName () {return "Deived" ;}} ;
:
> | class Base
> | {public String getName () {return "Base" ;}}
> |
> | class Derived extends Base
> | {public String getName () {return "Deived" ;}}
Java のこれと上の C++ ソースを同列に語るのは間違いです。設計思想
が違いますから。比べるべきは↓です。
※※ Javaのクラス型変数は,C++ではポインタ
※※ Javaの(非final)メソッドは,C++ではvirtualメンバ関数
class Base {
public:
virtual char *getName() { return "Base"; }
};
class Derived : public Base {
public:
virtual char *getName() { return "Derived"; }
};
int main()
{
Derived *derived = new Derived;
Base *derivedInBase = derived;
std::cout << "derived->getName(): "
<< derived->getName() << std::endl
<< "derivedInBase->getName(): "
<< derivedInBase->getName() << std::endl;
delete derived;
return 0;
}
—[ Tietew ]——— tietew@... / tietew@... ——————
■Tietew Windows Lab. http://www.tietew.net/
★C++:language&libraries過去ログ&なまず http://www.tietew.jp/cppll/
PGP fingerprint: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA
On Wed, 13 Aug 2003 06:41:52 +0900
In article <00b401c3611a$a76ba700$55ac723d@default>
[[cppll:9394] Re: オーバーロードかオーバーライドか?]
中田 俊介 <nakatasyunsuke@...> wrote:
> | class Base
> | {public: char *getName () {return "Base" ;}} ;
> |
> | class Derived : public Base
> | {public: char *getName () {return "Deived" ;}} ;
:
> | class Base
> | {public String getName () {return "Base" ;}}
> |
> | class Derived extends Base
> | {public String getName () {return "Deived" ;}}
Java のこれと上の C++ ソースを同列に語るのは間違いです。設計思想
が違いますから。比べるべきは↓です。
※※ Javaのクラス型変数は,C++ではポインタ
※※ Javaの(非final)メソッドは,C++ではvirtualメンバ関数
class Base {
public:
virtual char *getName() { return "Base"; }
};
class Derived : public Base {
public:
virtual char *getName() { return "Derived"; }
};
int main()
{
Derived *derived = new Derived;
Base *derivedInBase = derived;
std::cout << "derived->getName(): "
<< derived->getName() << std::endl
<< "derivedInBase->getName(): "
<< derivedInBase->getName() << std::endl;
delete derived;
return 0;
}
—[ Tietew ]——— tietew@... / tietew@... ——————
■Tietew Windows Lab. http://www.tietew.net/
★C++:language&libraries過去ログ&なまず http://www.tietew.jp/cppll/
PGP fingerprint: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA
▼ スレッド
- 9368: 問題: 太郎君は以下に示すクラス A, B を宣言しました. struct A { virtual int f(); //[1] int f(int); //[2] }; Kazu
- └9369: 中田 俊介 nakatasyunsuke‐at‐ma.0038.net 構造体Bが以下のような物の場合と比べて考えてみると良いかも 中田 俊介
- └9371: 自分の中ではこんな解答に落ち着きました... struct A { virtual void f() {cout << "A::f( )\n"; } //[1] void f(in Kazu
- └9394: 中田 俊介 nakatasyunsuke‐at‐ma.0038.net オーバーライドについての話題 kazu さんから出ました。 kazu さん 中田 俊介
- ├9395: これって上書き(オーバーライト)? すごく不便な気がするのですが.. Java は飲んだことがないの Kazu
- ├9396: あるメソッドをポリモーフィックにするかどうかは、言語レベルに落とすより上の 設計段階で Satoshi Nakamura
- │└9421: そういえば,暗黙の型変換があれば,hide はコンパイルエラーになりませんね. FORTRAN 亡命者や数値 Kazu
- │ └9427: 中田 俊介 nakatasyunsuke‐at‐ma.0038.net オーバーライドや隠蔽(ハイド)によって予期せぬところで影響が 中田 俊介
- ├9397: 上記のままだと Base クラスのインスタンスを作ってますね。参照に Base& derivedInBase = derived ; ク Imabeppu
- ├9400: Java のこれと上の C++ ソースを同列に語るのは間違いです。設計思想 ※※ Javaのクラス型変数は, Tietew
- └9404: 中田 俊介 nakatasyunsuke‐at‐ma.0038.net ご指摘を下さった皆様、ありがとうございました。 Imabeppu さん 中田 俊介
- ├9405: 追い打ちを掛けるようで悪いですが,フィールド(メンバ変数)の場合 はオーバライドではなくハ Tietew
- └9406: 「参照の宣言された型」って, どういう意味でしょうか? 名古屋大学大学院 情報科学研究科 計 Takao Ono
- └9417: 中田 俊介 nakatasyunsuke‐at‐ma.0038.net 括弧で括られたところは参考にした資料「advanced Java」からの引 中田 俊介