1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
class b{ public: b(int x){} }; class a:b{ public: a(int x)/*:b(x)*/{}//[C++ Error] Unit1.cpp(49): E2251 Cannot find default constructor to initialize base class 'b' }; main(){}
Если надо сначала произвести какие-то действия над х в конструкторе а, и только потом его передать в конструктор b как надо действовать?
Разница между общим и необщим наследованием в том, что при общем поля public предка будут видны в наследнике, а иначе нет.
Это только часть разницы, причем меньшая. Гораздо интереснее - что
1. Защищенное наследование: все public и protected члены/методы предка в потомке становятся protected-членами/методами.
class A { public: int x; // Общий член };
class B : protected A { // Вот тут x уже защищенный, а не общий };
2. Частное наследование: все public и protected члены/методы предка в потомке становятся private-членами/методами, поэтому
class A { public: A(int px) : x(px) {} int x; // Общий член }; class B: A /* или class B : private A */ { // В этом классе x уже стал частным public: B(int x) : A(x) {} }; class C : public B { public: void test() { cout << x << endl; // В предке был частным - значит, тут нет доступа... Упс... } };
Цитата
Есть математическое описание объекта. Нужно сделать его графическое представление. Объект реализуется в своей системе координат. Чтобы сделать поправку при старте хотел обработать входящий параметр.
class Base { protected: int x; public: Base(int px) : x(px) { cout << "Base creation : " << x << endl; } }; class Derived : public Base { public: static Derived processBefore(int x); private: Derived(int x) : Base(x) { cout << "Derived creation" << endl; } };