Официальный сайт студ.городка НГТУ
Программирование и БД » наследование, ликбез 

#1  31.07.12 17:42

наследование, ликбез

такой код:

class A {
int _t;
public:
A(int t){
_t = t;
}
virtual void f();
}

class B : public A{
public:
virtual void f() = 0;
}

class C : public B {
public:
C(){};
void f(){};
}

но тут ошибка синтаксиса, надо вызвать конструктор класса A (из B и C).
как обойти?

Offline

#2  31.07.12 18:10

Re: наследование, ликбез

когда вижу так написанный код, то разбираться лень, только появляется желание застрелиться топором

Offline

#3  31.07.12 18:25

$up
Профиль

Re: наследование, ликбез

Flinn, а в чём смысл определения чистой виртуальной функции в B, если она уже определена в A?

Offline

#4  31.07.12 19:07

Re: наследование, ликбез

$up, и правда.

Offline

#5  31.07.12 21:25

$up
Профиль

Re: наследование, ликбез

Второй момент. Если ты уже сделал виртуальную функцию, то во всех наследниках, при оверрайде слово virtual должно стоять.
Вопрос про конструктор не понял.

Offline

#6  31.07.12 22:09

Re: наследование, ликбез

а если я не хочу позже наследоваться от самого конечного (класса С). ну грубо говоря код не компилится, потому что я не могу написать так
A* a;
a = new B; потому что в классе B в конструкторе нужно вызвать коструктор класса А. то же самое если я делаю так:
A* a;
a = new С;

Offline

#7  01.08.12 09:39

$up
Профиль

Re: наследование, ликбез

Так сделай в А еще один конструктор без параметров, либо в В и С конструкторы с параметром

Offline

#8  01.08.12 17:38

$up
Профиль

Re: наследование, ликбез

1)

Код: cpp:

class A 
{
	int _t;
public:
	A(int t)
	{
		_t = t;
	}
	virtual void f() = 0;
};
 
class B : public A
{
public:
	B():A(1){};
	virtual void f() override {};
};
 
class C : public B 
{
public:
	C(){};
	virtual void f() override {};
};

2)

Код: cpp:

class A 
{
	int _t;
public:
	A():_t(0){};
	A(int t)
	{
		_t = t;
	}
	virtual void f() = 0;
};
 
class B : public A
{
public:
	B(){};
	virtual void f() override {};
};
 
class C : public B 
{
public:
	C(){};
	virtual void f() override {};
};

3)

Код: cpp:

class A 
{
	int _t;
public:
	A(int t)
	{
		_t = t;
	}
	virtual void f() = 0;
};
 
class B : public A
{
public:
	B(int t):A(t){};
	virtual void f() override {};
};
 
class C : public B 
{
public:
	C(int t):B(t){};
	virtual void f() override {};
};

Offline

Программирование и БД » наследование, ликбез 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.069 сек.
Выполнено 14 запросов.