Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fau$t
0 / 0 / 0
Регистрация: 03.07.2010
Сообщений: 10
#1

иллюстрация полиморфизма - C++

30.12.2012, 01:20. Просмотров 574. Ответов 3
Метки нет (Все метки)

Доброго времени суток!написал примитив для иллюстрации полиморфизма,ориентировался по видеокурсам с ТыТрубы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<iostream.h>
#include<conio.h>
class Shape
{
 public :
   virtual float calc_area()=0;
};
 
class Rectangle : public Shape
{
 private:
  int width;
  int height;
 public :
  Rectangle(int w, int h) {width= w; height=h;}
  float calc_area() {return(width*height);}
};
 
class Circle : public Shape
{
 private:
  int radius;
 public:
  Circle(int r) {radius=r;}
  float calc_area() {return(3.14159*radius*radius);}
};
 
class Triangle : public Shape
{
 private:
  int width;
  int height;
 public:
  Triangle(int w, int h) {width= w;height= h;}
  float calc_area() {return(width*height/2);}
};
 
int main()
{
clrscr();
Rectangle r(5,12.5);
Triangle t(3,12);
Circle   c(5);
 
cout<<"Rectangle area:"<<r.calc_area()<<endl;
cout<<"Triangle area:"<<t.calc_area()<<endl;
cout<<"Circle area:"<<c.calc_area()<<endl;
/*
Shape* sr=&r;
Shape* st=&t;
Shape* sc=&c;
 
cout << "Rectangle area: " << sr -> calc_area()<<endl;
cout << "Triangle area: " << st -> calc_area() << endl;
cout << "Circle area: " << sc -> calc_area() << endl;
*/
return 0;
}
есть пара вопросов относительно терминологии
cout<<"Circle area:"<<c.calc_area()<<endl;-как правильно назвать выделенную часть?
cout << "Circle area: " << sc -> calc_area() << endl;- что в этой строчке значит sc->calc_area()?я понял это как вызов метода
Shape* sc=&c- как описать в правильных терминах эту строчку?
спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2012, 01:20     иллюстрация полиморфизма
Посмотрите здесь:

C++ Использование полиморфизма
Неочевидные грабли полиморфизма с++ C++
C++ Реализация полиморфизма
C++ Понятия инкапсуляции, полиморфизма и наследования
Виды полиморфизма C++ C++
В чем смысл полиморфизма C++
C++ Использование свойств полиморфизма
C++ Создать базовый класс, использовать свойства полиморфизма и абстракции
Смысл использования полиморфизма C++
C++ Иллюстрация быстрой сортировки
Принципы наследования и полиморфизма C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.12.2012, 02:00     иллюстрация полиморфизма #2
Цитата Сообщение от Fau$t Посмотреть сообщение
cout<<"Circle area:"<<c.calc_area()<<endl;-как правильно назвать выделенную часть?
Виртуальный метод

Цитата Сообщение от Fau$t Посмотреть сообщение
что в этой строчке значит sc->calc_area()
Вызов метода
no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 324
30.12.2012, 02:04     иллюстрация полиморфизма #3
C++
1
2
3
c.calc_area() //Используя селектор класса, вызываешь функцию
 
sc -> calc_area() //Используя селектор класса, вызываешь функцию
селектор "точка" используется для стековых объектов, а селектор "стрелка" для указателей на объекты.

C++
1
Shape* sc=&c //Объявляешь указатель на объект типа Share и присваиваешь ему адрес объекта c.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6412 / 3051 / 300
Регистрация: 04.12.2011
Сообщений: 8,264
Записей в блоге: 3
01.01.2013, 03:06     иллюстрация полиморфизма #4
Shape* sc=&c- как описать в правильных терминах эту строчку?
Проводится 2 операции: объявление указателя на базовый класс и инициализация этого указателя адресом производного класса. Позволяет передавать указатели в функции, где вызываются методы базового класса или, например, обрабатывать массивы таких указателей циклически с той же целью. Каждый раз при вызове виртуального метода базового класса, для каждого производного будет вызван его переопределённый (в Вашем случае определённый, так как в базовом классе представлен, чисто, виртуальный метод и переопределять нечего) метод. Это и есть реализация принципа - "один интерфейс - много методов" т.е. полиморфизм.
Yandex
Объявления
01.01.2013, 03:06     иллюстрация полиморфизма
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru