Имя пользователя:
Пароль:
 

Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Демонстрация static_cast, dynamic_cast
Код: Выделить весь код
class i1 {
public:
	virtual void foo() = 0;
};

class i2 {
public:
	virtual void bar() = 0;
};

class i3 {
public:
	virtual void goo() = 0;
};

class i4 {
public:
 	virtual void poo() = 0;
};

class impl: public i3, public i1, public i2 {
public:
	void goo() { cout << "goo()" << endl; }
	void foo() { cout << "foo()" << endl; }
	void bar() { cout << "bar()" << endl; }
};

int main() {
	impl *impl_ = new impl();
	i1 *i1_ = impl_;
 	i2 *i2_ = impl_;
	i3 *i3_ = impl_;
	i1 *side_cast = dynamic_cast<i1*>(i2_); // статически не наследуются
	i4 *bad_cast = dynamic_cast<i4*>(i2_); // статически не наследуются

	i1_->foo();
	i2_->bar();
	side_cast->foo();

	cout << "impl=" << impl_ << endl;
	cout << "i1=" << i1_ << endl;
	cout << "i2=" << i2_ << endl;
	cout << "i3=" << i3_ << endl;
	cout << "side_cast=" << side_cast << endl;
	cout << "bad_cast=" << bad_cast << endl;

	return 0;
}
Код: Выделить весь код
foo()
bar()
foo()
impl=0x3e1030
i1=0x3e1034
i2=0x3e1038
i3=0x3e1030
side_cast=0x3e1034
bad_cast=0
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:24, 18-08-2013 | #4