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

Полиморфизм своими словами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ c++ http://www.cyberforum.ru/cpp-beginners/thread37851.html
Что значит строки v_arr(arr, N); w_arr(arr, N);
C++ Проблемы с sort() В #include "stdafx.h" #include <iostream> #include <ctime> #include <algorithm> using namespace std; void out(int *a,int n,int k); void vin(int *a,int n); void copt(int *a,int n,int k); bool my (int i,int j) { return (i<j); } http://www.cyberforum.ru/cpp-beginners/thread37844.html
C++ Генератор случайных чисел в интервале (0;10)
Как сгенерировать случайную последовательность целых чисел лежащих в интервале то 0 до 10? Т.е. как задать границы для генерации ПСЧ.
ListView C++ C++
Пожалуйста!! Очень надо! С помощью ListView написать программу игры в шашки. Заранее спасибо
C++ найти ошибку http://www.cyberforum.ru/cpp-beginners/thread37817.html
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале , а потом все остальные. # include <stdio.h> # include <conio.h> # include <stdlib.h> # include <math.h> # include <iostream.h> void main() {
C++ Как в функцию передать параметр - двухмерный массив void max_el() { int i,j,max; for ( i=1 ; i<=n; i++) for ( j=1; j<=m; j++) //nahodim maksimalnii element if (max<a) { max=a; max_str=i; }; printf("Max element = %3d in Str %2d \n \n",max,max_str); for ( j=1 ; j<=m; j++) printf("%3d ",a); подробнее

Показать сообщение отдельно
_SOKOL_
1 / 1 / 0
Регистрация: 09.02.2013
Сообщений: 15
06.05.2013, 11:39     Полиморфизм своими словами
Перегрузка - это функции с одним именем которые принимают разные аргументы, это никак не полиморфизм, тут спорить не о чем.
Полиморфизм - один и тот же метод с одинаковыми параметрами и разными реализациями, возможен только в ООП.

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
#include <iostream>
using namespace std;
 
class vehicle
{
public:
    vehicle(void) {}
    virtual ~vehicle() = 0; // у чисто виртуального деструктора обязательно должна быть реализация
 
    virtual void move() {} /* Виртуальный метод, у таких методов в родительских классах как этот обязательно должна быть пустая реализация и реализация в дочерних классах. В противном случае выйдут ошибки: LNK2001 и LNK1120 */
};
vehicle::~vehicle() {}
 
 
// Наследуемые классы
class tank : public vehicle
{
public:
    tank(void) {}
    ~tank(void) {}
    void move() { cout << "Tank moving\n"; } /* Вот опять же, на всякий случай напомню, что перегрузка это функции с одним именем которые принимают разные аргументы, здесь же у нас тот же метод что у родителя с теме же параметрами но иной реализацией, это полиморфизм */
};
 
 
class truck : public vehicle
{
public:
    truck(void) {}
    ~truck(void) {}
    void move() { cout << "Truck moving\n"; }
};
 
 
// Точка входа
int main()
{
    // Первый вариант полиморфизма
    vehicle *Vehicle[2];
    Vehicle[0] = new truck[5];
    Vehicle[1] = new tank[2];
    Vehicle[0][3].move();   //  на выводе Truck moving
    Vehicle[1][1].move();   //  на выводе Tank moving
 
    // Второй вариант
    vehicle **Vehicle2;
    Vehicle2 = new vehicle*[2];
    Vehicle2[0] = new truck[4];
    Vehicle2[1] = new tank[3];
    Vehicle[0][1].move();   //  на выводе Truck moving
    Vehicle[1][1].move();   //  на выводе Tank moving
 
    return 0;
}
По правде такой код у меня не работает) необходимо по человечески разбить классы на файлы

Добавлено через 5 минут
vehicle.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
 
#include <iostream>
using namespace std;
 
class vehicle
{
public:
    vehicle(void);
    virtual ~vehicle(void) = 0;
 
    virtual void move(); /* Виртуальный метод, у таких методов в родительских классах как этот обязательно должна быть пустая реализация и реализация в дочерних классах. В противном случае выйдут ошибки: LNK2001 и LNK1120 */
};

vehicle.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "vehicle.h"
 
 
vehicle::vehicle(void)
{
}
 
 
vehicle::~vehicle(void)
{
}
 
 
void vehicle::move()
{
 
}

tank.h
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
 
#include "vehicle.h"
 
class tank : public vehicle
{
public:
    tank(void);
    ~tank(void);
    void move(); /* Вот опять же, на всякий случай напомню, что перегрузка это функции с одним именем которые принимают разные аргументы, здесь же у нас тот же метод что у родителя с теме же параметрами но иной реализацией */
};

tank.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "tank.h"
 
 
tank::tank(void)
{
}
 
 
tank::~tank(void)
{
}
 
 
void tank::move()
{
    cout << "Tank moving\n";
}

truck.h
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
 
#include "vehicle.h"
 
class truck : public vehicle
{
public:
    truck(void);
    ~truck(void);
    void move();
};

truck.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "truck.h"
 
 
truck::truck(void)
{
}
 
 
truck::~truck(void)
{
}
 
 
void truck::move()
{
    cout << "Truck moving\n";
}

header.h
C++
1
2
#include "tank.h"
#include "truck.h"

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "header.h"
 
int main()
{
    // Первый вариант полиморфизма
    vehicle *Vehicle[2];
    Vehicle[0] = new truck[5];
    Vehicle[1] = new tank[2];
    Vehicle[0][3].move();   //  на выводе Truck moving
    Vehicle[1][1].move();   //  на выводе Tank moving
 
    // Второй вариант
    vehicle **Vehicle2;
    Vehicle2 = new vehicle*[2];
    Vehicle2[0] = new truck[4];
    Vehicle2[1] = new tank[3];
    Vehicle[0][1].move();   //  на выводе Truck moving
    Vehicle[1][1].move();   //  на выводе Tank moving
 
    return 0;
}
 
Текущее время: 12:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru