class A { void func() { } }; class B { void func() { } }; の中で直接定義していくような記述をしてきたいのだけど それだと、class A の中から class B のメンバ関数を呼び出したいとき 名称前方参照のため、コンパイルができない。 結局、ヘッダに型宣言をせざるを得なくなる。
class Dog : public Animal , public Nakeru { void naku(); Nakeru* nakeru() { return this; } }; class Cat : public Animal , public Nakeru { void naku(); Nakeru* nakeru() { return this; } }; class Hoge : public Animal { };
void naku( Animal* a[10] ) { for( int i = 0 ; i < 10 ; ++i ) if( Nakeru* nakeru = a[i]->nakeru() ) nakeru->naku(); }
class Dog : public Animal , public Nakeru { void naku(); Nakeru* nakeru() { return this; } }; class Cat : public Animal , public Nakeru { void naku(); Nakeru* nakeru() { return this; } }; class Hoge : public Animal { };
[Note: in particular, the order in which namespaces were considered and the relationships among the namespaces implied by the using-directives do not cause preference to be given to any of the declarations found by the search. ]
//普通のクラス (上の汎用クラスを継承) class tools_class:image_base_class<double> { public: int dx,dy; tools_class();//このクラスのコンストラクタ int draw_nanika(image_base_class<double> * iImage);//適当な関数
//普通のクラス (上の汎用クラスを継承) class tools_class:image_base_class<double> { public: int dx,dy; tools_class();//このクラスのコンストラクタ int draw_nanika(image_base_class<double> * iImage);//適当な関数
class tools_class : public image_base_class<double> { int dx,dy; public: tools_class();//このクラスのコンストラクタ int draw_nanika(image_base_class<double>* iImage);//適当な関数 }; //コンストラクタ tools_class::tools_class() { dx = 0; dy = 0; }
class range { int start;int length;int end;/*end==start+length*/ public: int get_start()const{return start;} int const& get_length()const{return length;} int get_end()const{return end;} ... }; ... for(int i=r.get_start();i<r.get_end();i++) ...
こういうので int end; を除去して int range::get_end()const{return start+len;} に変更しても表面上の仕様は変わらないように アクセサーは内部仕様そのもの及びその変化を表面に出さない長所あり
void traverser(_SomeType &val, const Node *node, int level) { for (Node::link_const_iter it = node->begin_of_link(); it != node->end_of_link(); ++it) if (探索を続けるとき) traverser(val, *it, ++level); }
class A { private: int m; friend class BinA; class BinA { BinA(A &a) { a.m; } }; }; と class A { private: int m; class BinA { BinA(A &a) { a.m; } }; friend class BinA; }; でコンパイル結果が変わるんだけど、VC++6.0だから?