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

Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
elvipka
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 54
27.05.2013, 16:30     Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями #1
Прошу вашей интеллектуальной помощи)
Условие задачи:
16. Создать абстрактный класс Norm с виртуальной функцией вычисления нормы и модуля. Определить производные классы Complex,Vector3D с собственными функциями вычисления нормы и модуля. (Модуль для комплексного числа вычисляется как корень из суммы квадратов действительной и мнимой частей; норма для комплексных чисел вычисляется как модуль в квадрате. Модуль вектора вычисляется как корень квадратный из суммы квадратов координат; норма вектора вычисляется как максимальное из абсолютных значений координат.)
Задача:
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
class Norm
{ double a; double b;
public:
    virtual double area1() const = 0;
    virtual double area2() const = 0;
};
 
class Complex: public Norm
{
public:
    Complex(double a,double b): _a(a), _b(b) { }
 
    virtual double area1() { return sqrt(_a*_a+_b*_b); }
    virtual double area2() { return (_a*_a+_b*_b); }
 
private:
    double _a; double _b;
};
 
class Vector3D: public Norm
{
public:
    Vector3D(double c,double d): _c(c), _d(d)  { }
 
    virtual double area1() { return sqrt(_c*_c+_d*_d); }
    virtual double area2() { if (_c>_d) return _c; else return _d; }
 
private:
    double _c; double _d;
};
 
int main(int argc, char* argv[])
{
    Norm *shapes[2];
 
 
    shapes[0] = new  Complex (3,6);
    shapes[1] = new Vector3D (2,7);
 
    for (int i = 0; i < 2; ++i)
        {cout << shapes[i]->area1() << endl;
         cout << shapes[i]->area2() << endl;}
 
    for (int i = 0; i < 2; ++i)
        {delete shapes[i];
         delete shapes[i];
        }
 
return 0;
 
}
Выдает ошибки. Люди добрые!) У кого руки золотые!) И голова!) Помогите, пожалуйста)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2013, 16:30     Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями
Посмотрите здесь:

Абстрактный класс с виртуальной функцией C++
C++ Создать абстрактный базовый класс с виртуальной функцией
C++ задача на абстрактные классы (создать абстрактный базовый класс с виртуальными методами вычисления ф-ции y=f(x) в заданной точке х)
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема C++
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы C++
C++ Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle
C++ Создайте базовый абстрактный класс «Товар» с чистой виртуальной функцией вывода данных
Создать абстрактный базовый класс Number с виртуальной функцией - норма C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
27.05.2013, 16:56     Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями #2
const - входит в сигнатуру функции, поэтому его отсутствие - суть перегрузка функции. Т.е. в абстрактном классе она объявлена была, в производных же - не реализована. Еще ошибка в самом последнем цикле - дважды освобождалась память. Поправил, код ниже:
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
class Norm
{ double a; double b;
public:
    virtual double area1() const = 0;
    virtual double area2() const = 0;
};
 
class Complex: public Norm
{
public:
    Complex(double a,double b): _a(a), _b(b) { }
 
    virtual double area1() const { return sqrt(_a*_a+_b*_b); }
    virtual double area2() const { return (_a*_a+_b*_b); }
 
private:
    double _a; double _b;
};
 
class Vector3D: public Norm
{
public:
    Vector3D(double c,double d): _c(c), _d(d)  { }
 
    virtual double area1() const { return sqrt(_c*_c+_d*_d); }
    virtual double area2() const { if (_c>_d) return _c; else return _d; }
 
private:
    double _c; double _d;
};
 
int main(int argc, char* argv[])
{
    Norm *shapes[2];
 
 
    shapes[0] = new  Complex (3,6);
    shapes[1] = new Vector3D (2,7);
 
    for (int i = 0; i < 2; ++i)
        {cout << shapes[i]->area1() << endl;
         cout << shapes[i]->area2() << endl;}
 
    for (int i = 0; i < 2; ++i)
        {delete shapes[i];         
        }
 
return 0;
 
}
elvipka
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 54
27.05.2013, 16:59  [ТС]     Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями #3
Цитата Сообщение от ITcrusader Посмотреть сообщение
const - входит в сигнатуру функции, поэтому его отсутствие - суть перегрузка функции. Т.е. в абстрактном классе она объявлена была, в производных же - не реализована. Еще ошибка в самом последнем цикле - дважды освобождалась память. Поправил, код ниже:
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
class Norm
{ double a; double b;
public:
    virtual double area1() const = 0;
    virtual double area2() const = 0;
};
 
class Complex: public Norm
{
public:
    Complex(double a,double b): _a(a), _b(b) { }
 
    virtual double area1() const { return sqrt(_a*_a+_b*_b); }
    virtual double area2() const { return (_a*_a+_b*_b); }
 
private:
    double _a; double _b;
};
 
class Vector3D: public Norm
{
public:
    Vector3D(double c,double d): _c(c), _d(d)  { }
 
    virtual double area1() const { return sqrt(_c*_c+_d*_d); }
    virtual double area2() const { if (_c>_d) return _c; else return _d; }
 
private:
    double _c; double _d;
};
 
int main(int argc, char* argv[])
{
    Norm *shapes[2];
 
 
    shapes[0] = new  Complex (3,6);
    shapes[1] = new Vector3D (2,7);
 
    for (int i = 0; i < 2; ++i)
        {cout << shapes[i]->area1() << endl;
         cout << shapes[i]->area2() << endl;}
 
    for (int i = 0; i < 2; ++i)
        {delete shapes[i];         
        }
 
return 0;
 
}
работает!)
Благодарю Вас!)
Yandex
Объявления
27.05.2013, 16:59     Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями
Ответ Создать тему
Опции темы

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