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

Производные от Base классы.

Рубрика: C++, Дата: 26 March, 2013, Автор:
Tags:

Пусть дано определение.

class Base
{
public:
	virtual void iam()
	{
		cout <<"Base \n";
	}	
};

Напишите два производных от Base класса и для каждого из них определите iam(), выводящую имя класса. Создайте объекты этих классов и вызовите iam для них. Присвойте значения указателей на эти объекты указателю типа Base* и вызовите с его помощью iam()

Это мы тут наверное смоделируем полиморфизм мне так чото кажется. Создадим два класса каких нибудь, переопределим функцию iam() в них. Я уже и забыл, что такое за виртуальная функция и чисто виртуальная функция и чем они отличаются. По ходу решения задач я думаю разберемся.

Вот код файл main.cpp:

//pervoe ypr
#include <iostream>
using std::cout;
using std::endl;

class Base
{
public:
	virtual void iam()
	{
		cout <<"Base \n";
	}	
};

class Base1 : public Base
{
public:
	void iam()
	{
		cout <<"Base1"<<endl;
	}
};

class Base2 : public Base
{
public:
	void iam()
	{
		cout <<"Base2"<<endl;
	}
};

int main()
{
	Base1 a;
	a.iam();
	Base2 b;
	b.iam();
	Base* baza;
	Base1* a1=&a;
	Base2* b2=&b;
	cout <<"_________________________"<<endl;
	baza=a1;
	baza->iam();
	baza=b2;
	baza->iam();
	cout <<"**************************"<<endl;
	baza=&a;
	baza->iam();
	baza=&b;
	baza->iam();
	
	return 0;
}

Ну это иллюстрирует полиморфизм в С++. мы может указатель на производный класс присвоить базовому, но наоборот нельзя. Указатель базового класса присвоить указателю производного класса потому, что в базовом классе могут отсутствовать функции которые находятся в производном классе, так что так. Такие пироги ребята. Как мы видим нам не нужно переживать какая функция вызовется. Вызовется та функция которая принадлежит указателю на данный объект с него вызовется от так то.

rss