>>791 ありがとうございます。 でもデフォルト引数が増えていくと定義も増えるので それで少し面倒かなと思いまして。 T foo( const Bar & object, int arg1 = object.get1(), int arg2 = object.get2(), int arg3 = (以下略 面倒がらずに書いていきたいと思っております…。
class base { public: virtual void __stdcall whoami() { cout << "I am base" << endl; } }; class derived : public base { public: virtual void whoami() { cout << "I am derived" << endl; } }; int main() { base* b= new derived();
継承関係にある2つのクラスがあるとして class base {}; class derived : public base {}; 派生クラスのコンテナのイテレータを vector<derived*> v; vector<base*>::iterator i = v.begin(); のように基底クラスのコンテナのイテレータに自動的に変換して欲しいと 感覚的には思うんですが、なぜそうなっていないのでしょうか???
*i = new derived2; で型安全性が損なわれるという理由がよく分からないです。 base* p = new derived1; p->func(); delete p; p = new derived2; p->func(); delete p; ↑これは普通ですよね。 ↓これも void func(base* p) {} derived1* p = new derived1; func(p); 駄目な例があると分かり易いんですが…。