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

Как из дружественной функции сделать метод - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
24.10.2010, 12:38     Как из дружественной функции сделать метод #1
Ну изначальное задание звучит так:

Реализовать класс Вектор наследник класса Комплекс. Перегрузить 1 префиксную, 1 бинарную, 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
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
#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  minus(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  umnog(KOMPLEX f)
        {  KOMPLEX Z(Re * f.Re - Im * f.Im, Re * f.Im + Im * f.Re);
             return Z; };
        KOMPLEX  delit(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 f)
        {KOMPLEX Z(Re, -1 * Im);
            return Z;};
    friend void znak(KOMPLEX k) // cделать метод
        {   if (k.Im<0) { printf("%lf %lfi \n", k.Re, k.Im);}
                    else printf("%lf + i%lf \n", k.Re, k.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::umnog;
    KOMPLEX::minus;
    friend void znak(Vector k)
        {   if (k.Im<0) { printf("%lf %lfi \n", k.Re, k.Im);}
                    else printf("%lf i%lf \n", k.Re, k.Im);};
 
};
 
int _tmain()
{
setlocale (LC_ALL, "Russian");
KOMPLEX k, s;
 
        char w;
        double Re;
        double Im;
        int q=1;
        do 
        {
        printf("Введите  1оe числo \n ");
        scanf("%lf %lf", &Re, &Im);
        KOMPLEX a(Re,Im);
        printf ("%lf + i%lf \n", Re, Im);
 
        printf("Введите 2ое число \n ");
        scanf("%lf %lf", &Re, &Im);
        KOMPLEX f(Re, Im);
        printf ("%lf + i%lf \n", Re, Im);
 
 
        printf("Введите знак действи который хотите совершить -, +, *, /  или  s -  что будет означать что вам необходимо найти сопряженное  для 1ого комплексного числа: \n ");
        scanf("%s", &w); 
        printf (" Ответ \n");
        switch (w)
        {
                case '-':
                        znak(a.minus(f));   
                        break;
                case '+':
                        znak(a+f);
                        break;
                case '*':
                        znak(a.umnog(f));
                        break;
                case '/':
                        znak(a.delit(f));
                        break;
                case 's':
                        znak( a.sopr(f));
                        break;
        };
        printf ("Хотите повторить запрос нажмите 1, выйти нажмите 0 \n");
        scanf_s ("%d", &q);
        }
        while (q==1);
        system("pause");
        exit(0);
        _getch();
        return 0;
}
Добавлено через 45 минут
кто-нить мож подсказать???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2010, 12:38     Как из дружественной функции сделать метод
Посмотрите здесь:

C++ определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
C++ Программа с использованием дружественной функции и классов
Ошибка дружественной функции C++
C++ шаблонные функции(нужно сделать метод сортировки)
C++ Чем внешняя функция отличается от дружественной кроме как синтаксисом?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
24.10.2010, 15:07     Как из дружественной функции сделать метод #21
пример работы
Миниатюры
Как из дружественной функции сделать метод  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
24.10.2010, 15:13  [ТС]     Как из дружественной функции сделать метод #22
это проверка на знак, что бы не выдавала +- одновременно

Добавлено через 4 минуты
терь проверка не выполняется знак идет +-
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
24.10.2010, 15:21     Как из дружественной функции сделать метод #23
ясно, а то я не понял что это так хитро сделано
по программе всё работает?
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
24.10.2010, 15:23  [ТС]     Как из дружественной функции сделать метод #24
Цитата Сообщение от IchMors Посмотреть сообщение
ясно, а то я не понял что это так хитро сделано
по программе всё работает?
cпс, но терь именно это и не работает
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
24.10.2010, 15:25     Как из дружественной функции сделать метод #25
Цитата Сообщение от White Luna Посмотреть сообщение
но терь именно это и не работает
ну так верните обратно
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
24.10.2010, 15:34  [ТС]     Как из дружественной функции сделать метод #26
есле вернуть ты вылетает прога, ничего не считая
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
24.10.2010, 15:37     Как из дружественной функции сделать метод #27
вот мой код, нормально всё работает...
#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 minus(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 umnog(KOMPLEX f)
{ KOMPLEX Z(Re * f.Re - Im * f.Im, Re * f.Im + Im * f.Re);
return Z; };
KOMPLEX delit(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 f)
{KOMPLEX Z(Re, -1 * Im);
return Z;};


void znak(KOMPLEX k) // cделать метод
{ if (k.Im<0) { printf("%lf %lfi \n", k.Re, k.Im);}
else printf("%lf + i%lf \n", k.Re, k.Im);};
void znak()
{cout << Re << ends << Im;}

void Get(double a, double b)
{
Re = a;
Im = b;
}

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::umnog;
KOMPLEX::minus;
// KOMPLEX::znak;

};

int _tmain()
{
setlocale (LC_ALL, "Russian");
KOMPLEX k, s;


int w;
double Re;
double Im;
int q=1;
KOMPLEX a, f;
do
{
printf("Введите 1оe числo \n ");
scanf_s("%lf %lf", &Re, &Im);
a.Get(Re, Im);
printf ("%lf + i%lf \n", Re, Im);

printf("Введите 2ое число \n ");
scanf_s("%lf %lf", &Re, &Im);
f.Get(Re, Im);
printf ("%lf + i%lf \n", Re, Im);


printf("Введите знак действи который хотите совершить -(1), +(2), *(3), /(4) или s(5) - что будет означать что вам необходимо найти сопряженное для 1ого комплексного числа: \n ");
cin >> w;
printf (" Ответ \n");
switch (w)
{
case 1:
{

a.znak(a.minus(f));
}
break;
case 2:
a.znak(a+f);
break;
case 3:
a.znak(a.umnog(f));
break;
case 4:
a.znak(a.delit(f));
break;
case 5:
a.znak( a.sopr(f));
break;
default: cout << "error\n";
};
printf ("Хотите повторить запрос нажмите 1, выйти нажмите 0 \n");
scanf_s ("%d", &q);
}
while (q==1);
system("pause");
exit(0);
_getch();
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2010, 15:44     Как из дружественной функции сделать метод
Еще ссылки по теме:

C++ Почему у дружественной функции два аргумента, а у метода класса один?
C++ Не хватает прав доступа к закрытому члену класса из дружественной функции
C++ Реализация дружественной (friend) функции

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

Или воспользуйтесь поиском по форуму:
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
24.10.2010, 15:44  [ТС]     Как из дружественной функции сделать метод #28
не понимаю где у меня ошибка, лан буду думать, спс

Добавлено через 1 минуту
нашла ошибку, в условии k забыла_)))
Yandex
Объявления
24.10.2010, 15:44     Как из дружественной функции сделать метод
Ответ Создать тему
Опции темы

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