Предыдущий пост -

Как испортить объект без приведения типов?.

Рубрика: C++, Дата: 22 April, 2013, Автор:

Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений с тем, чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*. Напишите программу которая может испортить объект типа Derived без использования приведения типов. Опишите безопасное ослабление правил для типов аргументов замещаемых функций.

Опять запутанная задачка. Я чото ничего не пойму, что это за правила для проверки типов аргументов? Видимо это то правило при котором указателю базового класса можно присвоить указатель любого производного класса от него но не наоборот.

Что это значит? Я от вижу от нас хотят, что бы мы указатель на базовый класс присвоили указателю производного класса, что не возможно.

Значит мы должны просто предположить якобы это можно от короче у меня такой код получился:

//oclablenie pravil proverki
#include <iostream>
using std::cout;
using std::endl;

class Base
{
public:
	virtual void print(){cout <<"Base::print()"<<endl;}
	virtual Base* zam(Base*){return this;}
};
class Derived : public Base 
{
public:
	virtual void print(){cout <<"Base::print()"<<endl;}
	virtual Base* zam(Derived*){return this;}
};

int main()
{
	Derived* D=new(Derived);
	Derived* Zam=new(Derived);
	D=Zam->zam();
	
	return 0;
}

Вот, что то типо того имелось в веду, а мб и нет. Вообщето имелось в веду что бы можно было функцию Base* zam(Baze*) в производном классе заместить на функцию Derived* zam(Derived*) отакой от фигней. И что бы при компиляции не было ошибок и при использовании механизма виртуальных функций вызывалась замещаемая функция. Но это фигня получается. Никаких правил я думаю описывать не буду. Я и сам честно не сильно понял, что куда и как.

Ладно все на этом. 🙂

[youtube]http://www.youtube.com/watch?v=dGqpq9H0zKM[/youtube]

rss