Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
27 / 27 / 18
Регистрация: 13.09.2014
Сообщений: 137
1

Преобразование пользовательского типа, friend

07.12.2014, 03:47. Показов 551. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Этот код не работает, потому что класс X ничего не знает о классе Y?
Ошибки:Error 5 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
Error 3 error C2440: 'initializing' : cannot convert from 'x' to 'int'
Error 4 error C2440: '=' : cannot convert from 'x' to 'int'
Error 2 error C2079: 'y1' uses undefined class 'y'
Error 1 error C2027: use of undefined type 'y'

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
#include "stdafx.h"
#include <iostream>
using namespace std;
//class y;
class x {
private:
    int c = 100;
    friend class y;
public:
    x(){}
    x(y a)//!!!
    {}
};
class y {
private:
    int n = 101;
public:
    y(){}
    y(x b) { n = b.c; }
};
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "Rus");
    x x1;
    y y1(x1);
    y1 = x1;
    x1 = y1;
    
    cin.get();
    return 0;
}
А почему тогда этот работает?
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
#include "stdafx.h"
#include <iostream>
using namespace std;
//class y;
class x {
private:
    int c = 100;
    friend class y;
public:
    x(){}
    x(y& a)//!!!
    {}
};
class y {
private:
    int n = 101;
public:
    y(){}
    y(x b) { n = b.c; }
};
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "Rus");
    x x1;
    y y1(x1);
    y1 = x1;
    x1 = y1;
    
    cin.get();
    return 0;
}
А классу У, получается, доступны элементы класса Х, потому что есть строчка
C++
1
friend class y;
?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2014, 03:47
Ответы с готовыми решениями:

Преобразование типа из пользовательского в стандартный и из стандартного в пользовательский
Уважаемые форумчане, нужна ваша помощь в этом вопросе про преобразовния типов. Где об этом...

Преобразование пользовательского типа в стандартный и обратно, перегрузка операторов
#ifndef INTEGER_H_ #define INTEGER_H_ class Integer{ public: Integer(int=0); ~Integer();...

Можно ли присвоить объекту основного типа значение объекта пользовательского типа?
Правильно ли я понимаю, что SomeClass obj; int x = obj; или SomeClass obj; int x = 5 +...

Преобразование типа или преобразование типа указателя ?
Добрый день. Помогите пожалуйста понять что делает вот эта команда: out.write ((char *) &amp;n, sizeof...

2
Эксперт С++
8971 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2014, 04:17 2
В первом случае аргумент передается по значению.
А это значит, что будет выполняться копия аргумента.
А это значит, что компилятору нужно знать декларацию класса,
что бы знать как устроен конструктор копии.


Во втором случае используется передача по ссылке.
Передачу по ссылке компилятор может реализовать по точно такому же принципу, как и передачу по указателю.
А это означит - передать можно только адрес.
А это значит, что знать строение класса в этой точке не обязательно.
1
27 / 27 / 18
Регистрация: 13.09.2014
Сообщений: 137
07.12.2014, 23:39  [ТС] 3
hoggy, спасибо!!!
0
07.12.2014, 23:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2014, 23:39
Помогаю со студенческими работами здесь

Перегрузка операторов, friend или нет friend?
Всем здравствуйте. Есть такой вопрос: при перегрузке операторов в классе(пусть будут + и = (вообще...

Создание пользовательского типа данных
Здравствуйте, мне нужно создать свой тип данных,чтобы он мог принимать ограниченное количество...

Вектор пользовательского типа данных
Имеется класс: class Students { public: void set_name(string student_name) ...

Перегрузка operator<< для пользовательского типа
Переписал пример из учебника, но компилятор (visual 2017) выдает кучу ошибок. Добавлять...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru