IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Наследование, С++
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


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 как надо действовать?

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Разница между общим и необщим наследованием в том, что при общем поля 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;
}
};

inline Derived Derived::processBefore(int x)
{
cout << "Processing x" << endl; // Обрабатывай
return Derived(x);
}

int main()
{
Derived obj = Derived::processBefore(10);
return 0;
}

Угу?

Цитата
А паскаль то позволяет!
Опять похоливарить захотелось? smile.gif Не надо...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 3.05.2024 6:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name