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

Наследование классов - C++

Восстановить пароль Регистрация
 
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
19.05.2013, 21:43     Наследование классов #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
#include "stdafx.h"
 
class kvadrat
{
protected:
    double dlina;
public:
    kvadrat()
    {
        this->dlina=0;
    }
    kvadrat(double d)
    {
        this->dlina=d;
    }
    double square()
    {
        return dlina*dlina;
    }
    void print()
    {
        cout << "Площадь квадрата S=" << square() << endl;
        return;
    }
};
 
class kub : public kvadrat
{
public:
    kub():kvadrat()
    {
        this->dlina=0;
    }
    double squar()
    {
        return dlina*dlina*dlina;
    }
    void printf()
    {
        cout << "Объем куба V=" << squar() << endl;
        return;
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "rus");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    double x;
    cout << "Введите значение длины: ";
    cin >> x;
    cin.sync();
    kvadrat D1(x), *d1;
    d1=&D1;
    d1->print();
    cout << endl << endl;
    kub D2(x), *d2;
    d1=&D2;
    d1->print();
    d2=&D2;
    d2->printf();
    getch();
    return 0;
}


В чем у меня ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 21:43     Наследование классов
Посмотрите здесь:

C++ Наследование классов
C++ Наследование классов
Наследование классов C++
C++ Наследование классов
Наследование классов в С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
19.05.2013, 21:49     Наследование классов #2
не подключены библиотеки для стримов и локали.
здесь для D2 вызывается несуществующий конструктор

Цитата Сообщение от kukhtikov Посмотреть сообщение
kub D2(x), *d2;
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
19.05.2013, 22:08  [ТС]     Наследование классов #3
metaluga145,
C++
1
2
3
4
5
6
7
#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;
#include <Windows.h>
#include <locale.h>
#include <conio.h>
Вот библиотеки
Vacsus
1 / 1 / 1
Регистрация: 28.04.2013
Сообщений: 8
19.05.2013, 22:50     Наследование классов #4
У меня сегодня хорошее настроение, поэтому я написал этот код за тебя.
Кликните здесь для просмотра всего текста

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
#include <iostream>
 
class Square
{
protected:
    double length;
public:
    Square(double _length = 0);
    virtual double Calculate() const;
    virtual void Show() const;
};
 
class Cube: public Square
{
public:
    Cube(double _length = 0);
    double Calculate() const;
    void Show() const;
    
};
 
int main()
{
    Square s(5);
    Cube c(5);
    
    Square* ptr = &s;
    ptr->Show();
    ptr = &c;
    ptr->Show();
    
    system("pause");
    return 0;
}
 
Square::Square(double _length): length(_length)
{}
double Square::Calculate() const
{
    return length*length;
}
void Square::Show() const
{
    std::cout << "S = " << Calculate() << '\n';
}
 
 
Cube::Cube(double _length): Square(_length)
{}
double Cube::Calculate() const
{
    return length*length*length;
}
void Cube::Show() const
{
    std::cout << "V = " << Calculate() << '\n';
}


И таки да, ты не выполнил основное задание - не использовал виртуальные функции, а в этом был весь смысл.
Yandex
Объявления
19.05.2013, 22:50     Наследование классов
Ответ Создать тему
Опции темы

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