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

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

Войти
Регистрация
Восстановить пароль
 
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
#1

Вывод из класса наследника - C++

11.11.2010, 15:22. Просмотров 798. Ответов 13
Метки нет (Все метки)

У меня получается вывод из главного класса, а когда вывожу через функцию из класса наследника выдает ошибку, из-за чего так???? хоты вывожу по тому же принципу как и из главного класса
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "stdafx.h"
#include "tchar.h"
#include "string.h"
#include "stdio.h"
#include "locale.h"
#include "iostream"
#include "conio.h"
using namespace std;
class KOMPLEX
{       private:
                double Re;
                double Im;
        public:
                KOMPLEX (double e=0, double y=0)
                {Re=e; Im=y;};
                KOMPLEX  operator -(KOMPLEX f)
                { KOMPLEX Z(Re - f.Re, Im - f.Im);
                         return Z;      };
        friend KOMPLEX  operator +(KOMPLEX a, KOMPLEX f)
                {  KOMPLEX  Z(a.Re + f.Re, a.Im + f.Im);
             return Z;};
                KOMPLEX  operator *(KOMPLEX f)
                {  KOMPLEX Z(Re * f.Re - Im * f.Im, Re * f.Im + Im * f.Re);
                         return Z; };
                KOMPLEX  operator /(KOMPLEX f)
                { KOMPLEX Z((Re * f.Re + Im * f.Im) / (f.Re * f.Re + f.Im * f.Im),(Im * f.Re - Re * f.Im) / (f.Re * f.Re + f.Im * f.Im));         
                         return Z;
                };
                KOMPLEX   sopr()
                {KOMPLEX Z(Re, -1 * Im);
                        return Z;};
        void znak() 
                {   if (Im<0) { printf("%lf %lfi \n", Re, Im);}
                         else printf("%lf + %lfi \n", Re, Im);};
         void Get(double a, double b)
                {
                        Re = a;
                        Im = b;
                    printf ("%lf + i%lf \n", Re, Im);
                }                                                   
                KOMPLEX KOMPLEX::operator ++(int)
                     {
                        KOMPLEX u(0,0);
                        u=*this;
                        Re++;
                        Im++;
                         return u;
                     };
                KOMPLEX KOMPLEX::operator --(void)
                    {
                        KOMPLEX u(0,0);
                        u=*this;
                        Re--;
                        Im--;
                        return u;
                     };
};
class Vector: public KOMPLEX
{
private:
                double Re;
                double Im;
public:
        KOMPLEX::operator --;
        KOMPLEX::operator ++;
        KOMPLEX::operator *;
        KOMPLEX::operator -;
        void vivod( double Re, double  Im)
        {
        cout<<"\n Вывод класса Vector:" <<'(' << Re <<','<< Im << ')'<<" \n";
        }
        void vivod2(void)
        {if (Im<0) cout<<"\n Вывод класса Vector:" <<'(' << Re <<','<< Im << ')'<<" \n";
        else cout<<"\n Вывод класса Vector:" <<'(' << Re <<','<< -Im << ')'<<" \n";
        }               
};
int _tmain()
{
setlocale (LC_ALL, "Russian");
KOMPLEX a, f;
Vector t, h;
        int w;
        double Re;
        double Im;
        int q=1;
                do 
                {
        printf("Введите  1оe числo \n ");
                scanf_s("%lf %lf", &Re, &Im);
cout<<" Вывод класса KOMPLEX :" ;
                a.Get(Re, Im);
                t.vivod(Re, Im);
        printf(" \n Введите 2ое число \n ");
                scanf_s("%lf %lf", &Re, &Im);
cout<<" Вывод класса KOMPLEX :" ;
            f.Get(Re, Im);
            h.vivod(Re, Im);
            printf(" \n Введите знак действи который хотите совершить -(1), +(2), *(3), /(4)  или  s(5) -  что будет означать что вам необходимо найти сопряженное  для 1ого комплексного числа: \n ");
        cin >> w; 
        printf (" Ответ \n");
        switch (w)
        {
                case 1:
                    (a-f).znak();
                        break;
                case 2:
                    (a+f).znak();
                                        Vector (t-h).vivod2();
                        break;
                case 3:
                    (a*f).znak();                    
                        break;
                case 4:
                    (a/f).znak();                                 
                        break;
                case 5:
                    a.sopr();
                    f.sopr()
                        ;
                       break;
                                default: cout << "error\n";
        };
                printf ("Хотите повторить запрос нажмите 1, выйти нажмите 0 \n");
                scanf_s ("%d", &q);
                }
                while (q==1);
            system("pause");
        exit(0);
        _getch();
        return 0;
}
C++
1
2
3
4
5
c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(107) : error C2440: <function-style-cast>: невозможно преобразовать 'KOMPLEX' в 'Vector'
        Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(107) : error C2228: выражение слева от ".vivod2" должно представлять класс, структуру или объединение
Журнал построения был сохранен в "file://c:\Documents and Settings\1\Мои документы\Visual Studio 2008\Projects\лдщзшщзщощз\лдщзшщзщощз\Debug\BuildLog.htm"
лдщзшщзщощз - ошибок 2, предупреждений 0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2010, 15:22     Вывод из класса наследника
Посмотрите здесь:

Вывод переменной из наследника класса - C++
Здравствуйте. Как можно вывести значение переменной класса из наследника, изменив это значение в нём? Таким методом, как я пробую, значение...

Конструктор класса наследника - C++
Я не могу понять свою ошибку к примеру если пишу так все нормально class one { public: one(); };

Объявление наследника шаблонного класса - C++
как объявить наследника шаблонного класса, да ещё если он обрамлён собственным пространсвом имён? Вот мой класс: namespace my_complex { ...

Не работает конструктор наследника класса - C++
Есть класс: template &lt;class T&gt; class HashTable { HashTable(int _size) { size = _size; for (int i = 0; i &lt;...

Создание базового класса и наследника - C++
в данной программе , попросили добавить в void main ///camera obj//// и дописать в конструктор camera::camera() сразу вывод через...

Два конструктора для класса-наследника - C++
Класс B является наследником класса A. Для класса B нужно определить 2 конструктора: один - наследуется от конструктора класса А, второй...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
11.11.2010, 16:31     Вывод из класса наследника #2
Цитата Сообщение от White Luna Посмотреть сообщение
class KOMPLEX
{ * * * private:
* * * * * * * * double Re;
* * * * * * * * double Im;
Объявите их не private а protected и все будет нормально.
Из за этого Вы не можете пользоваться этими переменными в классе наследнике

Добавлено через 1 минуту
Цитата Сообщение от White Luna Посмотреть сообщение
class Vector: public KOMPLEX
{
private:
* * * * * * * * double Re;
* * * * * * * * double Im;
из этого класса можно убрать эти переменные

Добавлено через 3 минуты
Как то слишком мудренно все написано.

Добавлено через 16 минут
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
#include "stdafx.h"
#include "tchar.h"
#include "string.h"
#include "stdio.h"
#include "locale.h"
#include "iostream"
#include "conio.h"
using namespace std;
class Complex
{       protected:
                double Re;
                double Im;
        public:
                Complex() : Re(0), Im(0) {};
                Complex (double re, double im) : Re(re), Im(im) {};
                Complex&  operator -(const Complex &right)
                {
                    Re-=right.Re;
                    Im-=right.Im;
                    return *this;      
                };
                
                Complex&  operator +(const Complex &right)
                {
                    Re+=right.Re;
                    Im+=right.Im;
                    return *this;      
                };              
                    
                friend Complex  operator +(const Complex &left, const Complex &right)
                {
                    return Complex(left.Re+right.Re, left.Im+right.Im);
                };
                
                Complex&  operator *(const Complex& right)
                {
                    double _re = Re;
                    double _im = Im;
                    Re = _re*right.Re-_im*right.Im;
                    Im = _re*right.Im+_im*right.Re;
                    return *this;
                };
                
                Complex& operator /(const Complex& right)
                {
                    double _re = Re;
                    double _im = Im;
                    double d = right.Re*right.Re+right.Im*right.Im;
                    Re = (_re*right.Re+_im*right.Im)/d;
                    Im = (_im*right.Re-_re*right.Im)/d;
                    return *this;
                };
                
                Complex sopr()
                {
                    return Complex(Re, -Im);
                }
                
                double Real() const {return Re;};
                double Image() const {return Im;};
                
                //и так далее пока все нужные функции не будут добавлены
};
 
class Vector: public Complex
{
public:
    Vector(): Complex() {};
    Vector(double re, double im) : Complex(re, im) {};
    
    //Здесь реализовываешь доп функционал
                           
};
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
11.11.2010, 22:16  [ТС]     Вывод из класса наследника #3
все равно та же ошибка выдается, даж есл исправить как ты сказал

Добавлено через 1 час 38 минут
и из-за чего такая ошибка может быть?

Добавлено через 3 часа 41 минуту
яс, никто не знает, жалко
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
11.11.2010, 22:47     Вывод из класса наследника #4
Т.е. вы считаете что это нормально, да?

C++
1
Vector (t-h).vivod2();
C++
1
(t-h).vivod2
тогда уж. Но я бы посоветовал записать в отдельную переменную...
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
11.11.2010, 23:33  [ТС]     Вывод из класса наследника #5
Цитата Сообщение от ForEveR Посмотреть сообщение
Т.е. вы считаете что это нормально, да?

C++
1
Vector (t-h).vivod2();
C++
1
(t-h).vivod2
тогда уж. Но я бы посоветовал записать в отдельную переменную...
я не считаю, что это норм, просто учительница (практику ведет у нас ток с прибабахом) сказала так попробовать,
как отдельную переменную мож пояснить, я тебя не поняла что ты под этим подразумеваешь
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
11.11.2010, 23:39     Вывод из класса наследника #6
White Luna, VECTOR s=t-h;
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
11.11.2010, 23:57  [ТС]     Вывод из класса наследника #7
ошибок стало еще больше
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(104) : error C2440: инициализация: невозможно преобразовать 'KOMPLEX' в 'Vector'
        Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(108) : error C2360: пропуск инициализации 'z' из-за метки 'case'
        c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(104): см. объявление 'z'
c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(111) : error C2360: пропуск инициализации 'z' из-за метки 'case'
        c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(104): см. объявление 'z'
c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(114) : error C2360: пропуск инициализации 'z' из-за метки 'case'
        c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(104): см. объявление 'z'
c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(117) : error C2360: пропуск инициализации 'z' из-за метки 'case'
        c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(104): см. объявление 'z'
c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(122) : error C2361: пропуск инициализации 'z' из-за метки 'default'
        c:\documents and settings\1\мои документы\visual studio 2008\projects\лдщзшщзщощз\лдщзшщзщощз\лдщзшщзщощз.cpp(104): см. объявление 'z'
Журнал построения был сохранен в "file://c:\Documents and Settings\1\Мои документы\Visual Studio 2008\Projects\лдщзшщзщощз\лдщзшщзщощз\Debug\BuildLog.htm"
лдщзшщзщощз - ошибок 6, предупреждений 0
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.11.2010, 00:01     Вывод из класса наследника #8
C++
1
2
3
                case 2:
                                        (a+f).znak();
                                        (t-h).vivod2();
Елки палки, а где перегрузка для минуса для вектора???
Именно для вектора. Ибо перегрузка для KOMPLEX возвращает объект типа KOMPLEX, а вам нужен Vector
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
12.11.2010, 00:02  [ТС]     Вывод из класса наследника #9
C++
1
2
3
4
5
 case 1:
                    (a-f).znak();
                    Vector z=(t-h);
                z.vivod2();
                        break;
я лишь 2 строчки добавила
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.11.2010, 00:03     Вывод из класса наследника #10
White Luna, Нужна перегрузка - для Vector-а
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
12.11.2010, 00:04  [ТС]     Вывод из класса наследника #11
Елки палки, а где перегрузка для минуса для вектора???
oй, когда код копировала тут не туда вставила, вот код щас который есть полностью
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include "stdafx.h"
#include "tchar.h"
#include "string.h"
#include "stdio.h"
#include "locale.h"
#include "iostream"
#include "conio.h"
using namespace std;
class KOMPLEX
{       protected:
                double Re;
                double Im;
        public:
                KOMPLEX (double e=0, double y=0)
                {Re=e; Im=y;};
                KOMPLEX  operator -(KOMPLEX f)
                { KOMPLEX Z(Re - f.Re, Im - f.Im);
                         return Z;      };
        friend KOMPLEX  operator +(KOMPLEX a, KOMPLEX f)
                {  KOMPLEX  Z(a.Re + f.Re, a.Im + f.Im);
             return Z;};
                KOMPLEX  operator *(KOMPLEX f)
                {  KOMPLEX Z(Re * f.Re - Im * f.Im, Re * f.Im + Im * f.Re);
                         return Z; };
                KOMPLEX  operator /(KOMPLEX f)
                { KOMPLEX Z((Re * f.Re + Im * f.Im) / (f.Re * f.Re + f.Im * f.Im),(Im * f.Re - Re * f.Im) / (f.Re * f.Re + f.Im * f.Im));         
                         return Z;
                };
                KOMPLEX   sopr()
                {KOMPLEX Z(Re, -1 * Im);
                        return Z;};
        void znak() 
                {   if (Im<0) { printf("%lf %lfi \n", Re, Im);}
                         else printf("%lf + %lfi \n", Re, Im);};
         void Get(double a, double b)
                {
                        Re = a;
                        Im = b;
                    printf ("%lf + i%lf \n", Re, Im);
                }                                                   
                KOMPLEX KOMPLEX::operator ++(int)
                     {
                        KOMPLEX u(0,0);
                        u=*this;
                        Re++;
                        Im++;
                         return u;
                     };
                KOMPLEX KOMPLEX::operator --(void)
                    {
                        KOMPLEX u(0,0);
                        u=*this;
                        Re--;
                        Im--;
                        return u;
                     };
};
class Vector: public KOMPLEX
{
public:
        KOMPLEX::operator --;
        KOMPLEX::operator ++;
        KOMPLEX::operator *;
        KOMPLEX::operator -;
        void vivod( double Re, double  Im)
        {
        cout<<"\n Вывод класса Vector:" <<'(' << Re <<','<< Im << ')'<<" \n";
        }
        void vivod2(void)
        {if (Im<0) cout<<"\n Вывод класса Vector:" <<'(' << Re <<','<< Im << ')'<<" \n";
        else cout<<"\n Вывод класса Vector:" <<'(' << Re <<','<< -Im << ')'<<" \n";
        }               
};
int _tmain()
{
setlocale (LC_ALL, "Russian");
KOMPLEX a, f;
Vector z, t, h;
        int w;
        double Re;
        double Im;
        int q=1;
                do 
                {
        printf("Введите  1оe числo \n ");
                scanf_s("%lf %lf", &Re, &Im);
cout<<" Вывод класса KOMPLEX :" ;
                a.Get(Re, Im);
                t.vivod(Re, Im);
        printf(" \n Введите 2ое число \n ");
                scanf_s("%lf %lf", &Re, &Im);
cout<<" Вывод класса KOMPLEX :" ;
            f.Get(Re, Im);
            h.vivod(Re, Im);
            printf(" \n Введите знак действи который хотите совершить -(1), +(2), *(3), /(4)  или  s(5) -  что будет означать что вам необходимо найти сопряженное  для 1ого комплексного числа: \n ");
        cin >> w; 
        printf (" Ответ \n");
        switch (w)
        {
                case 1:
                    (a-f).znak();
                    Vector z=(t-h);
                z.vivod2();
                        break;
                case 2:
                    (a+f).znak();
                        break;
                case 3:
                    (a*f).znak();                    
                        break;
                case 4:
                    (a/f).znak();                                 
                        break;
                case 5:
                    a.sopr();
                    f.sopr()
                        ;
                       break;
                                default: cout << "error\n";
        };
                printf ("Хотите повторить запрос нажмите 1, выйти нажмите 0 \n");
                scanf_s ("%d", &q);
                }
                while (q==1);
            system("pause");
        exit(0);
        _getch();
        return 0;
}
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.11.2010, 00:04     Вывод из класса наследника #12
White Luna, Да нет тут перегрузки - для вектора. Только для комплекс.
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
12.11.2010, 00:06  [ТС]     Вывод из класса наследника #13
Цитата Сообщение от ForEveR Посмотреть сообщение
White Luna, Нужна перегрузка - для Vector-а
но а ведь переменная класса KOMPLEX!

Добавлено через 1 минуту
и как перегрузить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2010, 00:09     Вывод из класса наследника
Еще ссылки по теме:

Вызов членов и объектов с наследника класса - C++
Есть базовый класс и два наследника: class CBase { public: int iNum; virtual void CBase_init( ); };

Как правильно записать наследника от такого класса? - C++
template &lt;class T&gt; class Me{ ...} От класса Me?

Вызов виртуального метода класса наследника из вектора - C++
#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class A { public: virtual void print() { cout &lt;&lt; &quot;A&quot; &lt;&lt;...

Создание экземпляра для наследника абстрактного класса - C++
Есть абстрактный базовый класс: class Base { public: int variable; virtual void clearVirtualFunction() = 0; }; ...


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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.11.2010, 00:09     Вывод из класса наследника #14
White Luna, Обе переменные и t и h у вас класса Vector. А как перегрузить это вы уж думайте сами... Форматировать код хотя бы научитесь...
Yandex
Объявления
12.11.2010, 00:09     Вывод из класса наследника
Ответ Создать тему
Опции темы

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