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

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

Войти
Регистрация
Восстановить пароль
 
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
#1

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

20.05.2013, 00:56. Просмотров 338. Ответов 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++ Задача с шаблонами и наследованием
Не разберусь с наследованием класса C++
C++ Класс со множественным наследованием
Сформировать набор классов связанных между собой виртуальным наследованием,описать каждый класс C++
C++ Слово return в простом примере с наследованием классов

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

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

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