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

Проблемы с наследованием классов - C++

Восстановить пароль Регистрация
 
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
20.05.2013, 00:56     Проблемы с наследованием классов #1
1-е задание:
Кликните здесь для просмотра всего текста

Создать класс базовый класс «вещественное число».
Элементы класса (поля имеют статус доступа protected):
поле, задающее значение числа;
конструктор для инициализации поля;
метод для вычисления модуля числа и его печати.
Создать производный класс «комплексное число».
Элементы класса:
дополнительно поле, задающее значение мнимой части числа;
конструктор для инициализации полей;
переопределенный метод для вычисления модуля числа и его печати (модуль числа – корень квадратный из суммы квадратов вещественной и мнимой частей числа).
Создать по 1 объекту каждого из классов. Объявить переменную - указатель, имеющею тип базового класса, вначале настроить ее на объект базового класса, вызвать метод базового класса через указатель на объект. Затем настроить ее на объект производного класса, вызвать метод производного класса через указатель на объект.

Код:
Кликните здесь для просмотра всего текста
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "stdafx.h"
#include <math.h>
#include <Windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
 
class vesh_chis
{
protected:
    double x;
public:
    vesh_chis()
    {
        this->x=0;
    }
    vesh_chis(double a)
    {
        this->x=a;
    }
    double mnim()
    {
        return abs(x);
    }
    void print()
    {
        cout << "Модуль числа :" << mnim() << endl;
        return;
    }
};
 
class comp_chis : public vesh_chis
{
    protected:
    double y;
public:
    comp_chis()
    {
        this->y=0;
    }
    comp_chis(double a, double b) : vesh_chis()
    {
        this->x=a;
        this->y=b;
        
    }
    double ob()
    {
        return sqrt(x*x+y*y);
    }
    void Print()
    {
        cout << "Модуль вещественного и мнимого числа :" << ob() << endl;
        return;
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    
    setlocale (LC_ALL, "rus");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    double x1, y1;
    cout << "Введите число: ";
    cin >> x1;
    cin.sync();
    vesh_chis D1(x1), *d1;
    d1=&D1;
    d1->print();
    cout << endl << endl;
    comp_chis D2(x1, y1), *d2;
    d1=&D2;
    d1->print();
    d2=&D2;
    d2->Print();
    getch();
    return 0;
}

Скажите пожалуйста, в чем ошибка?

2-е задание:
Кликните здесь для просмотра всего текста

Создать класс базовый класс «вектор на плоскости».
Элементы класса (поля имеют статус доступа protected):
поля, задающие координаты точки, определяющей конец вектора (начало вектора находится в точке с координатами 0, 0);
конструктор для инициализации полей;
метод для печати координат вектора.
Создать производный класс «вектор в трехмерном пространстве».
Элементы класса:
дополнительное поле, задающее дополнительную координату;
конструктор для инициализации полей;
переопределенный метод для печати координат вектора.
Создать по 1 объекту каждого из классов. Объявить переменную - указатель, имеющею тип базового класса, вначале настроить ее на объект базового класса, вызвать метод базового класса через указатель на объект. Затем настроить ее на объект производного класса, вызвать метод производного класса через указатель на объект.

Код:
Кликните здесь для просмотра всего текста
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "stdafx.h"
#include <Windows.h>
#include <locale.h>
#include <string.h>
#include <iostream>
using namespace std;
 
class vekt_na_pl
{
protected:
    double x, y;
public:
    vekt_na_pl()
    {
        this->x=0;
        this->y=0;
    }
    vekt_na_pl(double a, double b)
    {
        this->x=a;
        this->y=b;
    }
    void print()
    {
        cout << "Начальные координаты: x[0]=0, y[0]=0" << endl;
        cout << "Конечные координаты: x[1]=" << x << " y[1]=" << y << endl;
        return;
    }
};
 
class vekt_v_pr : public vekt_na_pl
{
    protected:
    double z;
public:
    vekt_v_pr()
    {
        this->z=0;
    }
    vekt_v_pr(double a, double b, double c) : vekt_na_pl()
    {
        this->x=a;
        this->y=b;
        this->z=c;
    }
    
    void Print()
    {
        cout << "Начальные координаты: x[0]=0, y[0]=0, z[0]=0" << endl;
        cout << "Конечные координаты: x[1]=" << x << "  y[1]=" << y << " z[1]=" << z << endl;
        return;
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "rus");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    double x1, y1, z1;
    cout << "Введите x[1]: ";
    cin >> x1;
    cin.sync();
    cout << "Введите y[1]: ";
    cin >> y1;
    cin.sync();
    vekt_na_pl D1(x1, y1), *d1;
    d1=&D1;
    d1->print();
    cout << endl << endl;
    cout << "Введите z[1]: ";
    cin >> z1;
    cin.sync();
    vekt_v_pr D2(x1, y1, z1), *d2;
    d1=&D2;
    d1->print();
    d2=&D2;
    d2->Print();
    system("pause");
    return 0;
}

Проверьте, правильно ли я понял смысл задания, плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2013, 00:56     Проблемы с наследованием классов
Посмотрите здесь:

Непонятки с наследованием C++
C++ Проблемы с наследованием
C++ помогите решить задачу с массовым наследованием классов
C++ Проблема с наследованием
Массив классов с наследованием C++
C++ Проблемы с наследованием
C++ Не могу разобраться с наследованием
Не разберусь с наследованием класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 07:31     Проблемы с наследованием классов #2
Цитата Сообщение от kukhtikov Посмотреть сообщение
Скажите пожалуйста, в чем ошибка?
print() нужно виртуальным сделать и он должен быть переопределён в производном классе (это же в задании сказано, а вы сделали для каждого класса свой метод). Тогда будет вызываться метод не по типу указателя, а по типу объекта, с которым этот указатель связан.
Yandex
Объявления
20.05.2013, 07:31     Проблемы с наследованием классов
Ответ Создать тему
Опции темы

Текущее время: 10:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru