Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337

Дружественная функция и приватные члены класса

22.02.2019, 14:18. Показов 2419. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане! Подскажите, пожалуйста, можно ли как-то в коде ниже сделать переменные класса приватными, а не публичными. У меня пока выдает ошибку. Вот код:

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 <string>
#include <fstream>
 
    using namespace std;
 
class ConsumerBasket {
 
    //private: не срабатывает
    public:
 
        string p_name;
        int c_rate;
        double p_price;
    
    public:
  
        friend ofstream& operator<<(ofstream &out, const ConsumerBasket &obj);  
};
 
    ofstream& operator<<(ofstream &out, const ConsumerBasket &obj) {
          out << obj.p_name << " "
            << obj.c_rate << " "
            << obj.p_price << "\n";
        return out;
    }
 
int main() {
    ifstream in("input.txt");
    ofstream out("output.txt");
    int n;
    double sum;
    in >> n;
    ConsumerBasket* goods = new ConsumerBasket[n];
    sum = 0.0;
    for (int i = 0; i < n; i++) {
        in >> goods[i].p_name >> goods[i].c_rate >> goods[i].p_price;
        sum += goods[i].p_price;
    }
    for (int i = 0; i < n; i++) {
          for (int j = n - 1; j > i; j--) {
              if (goods[j].p_price < goods[j-1].p_price) {
                  swap(goods[j], goods[j-1]);
              }
          }
    }
    cout << "Output of the program:\n";
    cout << "Total price: " << sum << "\n";
    for (int i = 0; i < n; i++) {
          out << goods[i];
    }
    in.close();
    out.close();
    cin.get();
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2019, 14:18
Ответы с готовыми решениями:

Дружественная функция класса
Проблема в том что дружественная функция класа механик в класе car (friend void update_status) не может обращатся к полям, почему? ...

Глобальная функция + приватные переменные + вызов из другого класса?
Всем добрый день. Помогите разобраться. Получаю определенные параметры и пытаюсь их сохранить в память. делаю так: SettGlobals.h...

Шаблон класса и дружественная функция
Доброго времени суток. Столкнулся с непониманием одного процесса. Задача звучит следующим образом: Написать шаблон функции isEqualTo для...

43
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
22.02.2019, 16:05  [ТС]
Студворк — интернет-сервис помощи студентам
Fixer_84, не понятно почему у тебя твой код не работает, попробуй этот
_stanislav, скорее всего, потому что пишу с планшета и в CCTools под Android. Тут иногда и функции у меня некоторые не срабатывают. Скорее всего дело в нехватке какого-то стандарта. Думал, что все сишные компиляторы должны работать одинаково. Оказалось, что это не так.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
22.02.2019, 16:05
Цитата Сообщение от n1b1ru Посмотреть сообщение
запись напрямую в приватное поле?
friend предоставляет полный контроль, для этого он и придуман
1
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
22.02.2019, 16:15
_stanislav, я и не про friend. Код ТС:
C++
1
in >> goods[i].p_name; // Если p_name в private
Как это должно работать?
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
22.02.2019, 16:22
Цитата Сообщение от n1b1ru Посмотреть сообщение
Как это должно работать?
не должно конечно
1
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
22.02.2019, 16:30
Цитата Сообщение от n1b1ru Посмотреть сообщение
Как это должно работать?
Если поля публичные то будет работать, если приватные, то надо поизвращатся, но в таком случае есть ли смысл в этом? Можно просто оставить их публичными.
1
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
22.02.2019, 16:32
_stanislav, ну так в вашем посту #13, я уверен что ТС пытается обратиться напрямую к i

Добавлено через 1 минуту
Azazel-San, _stanislav, это был риторический вопрос
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
22.02.2019, 16:32
Цитата Сообщение от n1b1ru Посмотреть сообщение
я уверен что ТС пытается обратиться напрямую к i
он же не копипастит список ошибок, трудно сказать что именно его интересует.
1
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
22.02.2019, 16:38
_stanislav, ок, подождем-с
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
22.02.2019, 18:40  [ТС]
n1b1ru, ваш вариант сработал. Спасибо. Думаю, что и остальные тоже правильны. Спасибо, что исправили мои ошибки, правда, так глубоко я подумать пока все равно не могу. Не знаю как устроена дружественная функция и не понимаю, почему не работало. Может быть, я зря писал программу с планшета. Всем спасибо, еще раз.

Добавлено через 9 минут
_stanislav, вы спрашивали, что не так. У меня компилятор DevC++. Стандарт С++14 подключен. Вот код:

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>
#include <string>
#include <fstream>
 
    using namespace std;
 
class ConsumerBasket {
 
    private:
 
        string p_name;
        int c_rate;
        double p_price;
    
    public:
         
        string a() const {return p_name;}
        string b() const {return p_name;}
        string c() const {return p_name;} 
};
 
    ofstream& operator<<(ofstream &out, const ConsumerBasket &obj) {
          out << obj.a() << " "
              << obj.b() << " "
              << obj.c() << "\n";
        return out;
    }
 
int main() {
    ifstream in("input.txt");
    ofstream out("output.txt");
    int n;
    double sum;
    in >> n;
    ConsumerBasket* goods = new ConsumerBasket[n];
    sum = 0.0;
    for (int i = 0; i < n; i++) {
        in >> goods[i].p_name >> goods[i].c_rate >> goods[i].p_price;
        sum += goods[i].p_price;
    }
    for (int i = 0; i < n; i++) {
          for (int j = n - 1; j > i; j--) {
              if (goods[j].p_price < goods[j-1].p_price) {
                  swap(goods[j], goods[j-1]);
              }
          }
    }
    cout << "Output of the program:\n";
    cout << "Total price: " << sum << "\n";
    for (int i = 0; i < n; i++) {
          out << goods[i];
    }
    in.close();
    out.close();
    cin.get();
    return 0;
}
Выдает ошибку: [Error] 'std::string ConsumerBasket:_name' is private
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
22.02.2019, 18:45
Цитата Сообщение от Fixer_84 Посмотреть сообщение
C++
1
2
3
string a() const {return p_name;}
* * * * string b() const {return p_name;}
* * * * string c() const {return p_name;}
Дико извиняюсь, но в чем смысл трижды выводить одно и тоже, причем под маской разных геттеров?
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
22.02.2019, 18:55
Fixer_84, так что ли
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
#include <iostream>
#include <string>
#include <fstream>
 
    using namespace std;
 
class ConsumerBasket {
 
    private:
 
        string p_name;
        int c_rate;
        double p_price;
    
    public:
         
        string GetName() const {return p_name;}
        int GetRate() const {return c_rate;}
        double GetPrice() const {return p_price;} 
 
        string SetName(const string& s) {p_name = s;}
        int SetRate(int i) {c_rate = i;}
        double SetPrice(double d) {p_price = d;} 
};
 
    ofstream& operator<<(ofstream &out, const ConsumerBasket &obj) {
          out << obj.GetName() << " "
              << obj.GetRate() << " "
              << obj.GetPrice() << "\n";
        return out;
    }
 
int main() {
    ifstream in("input.txt");
    ofstream out("output.txt");
    int n;
    double sum;
    in >> n;
    ConsumerBasket* goods = new ConsumerBasket[n];
    sum = 0.0;
 
    std::string tempS;
    int tempI;
    double tempD;
 
    for (int i = 0; i < n; i++) {
 
        in >> tempS >> tempI >> tempD;
 
        goods[i].SetName(tempS);
        goods[i].SetRate(tempI);
        goods[i].SetPrice(tempD);
 
        sum += goods[i].GetPrice();
    }
    for (int i = 0; i < n; i++) {
          for (int j = n - 1; j > i; j--) {
              if (goods[j].GetPrice() < goods[j-1].GetPrice() ) {
                  swap(goods[j], goods[j-1]);
              }
          }
    }
    cout << "Output of the program:\n";
    cout << "Total price: " << sum << "\n";
    for (int i = 0; i < n; i++) {
          out << goods[i];
    }
    in.close();
    out.close();
    cin.get();
    return 0;
}
Добавлено через 5 минут
Fixer_84, и operator<<, нет смысла делать дружественной, как сказал Мейерс:
От друзей иногда бывает больше хлопот чем пользы.

Добавлено через 44 секунды
если можно обойтись без них, то не нужно их использовать.
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
22.02.2019, 19:03  [ТС]
_stanislav, ваша идея тоже сработала только что, но вот в такой интерпретации:

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 <iostream> 
#include <string> 
#include <fstream>
 
    using namespace std;
 
class ConsumerBasket {
 
    private:
 
        string p_name;
        double c_rate;
        double p_price;
 
    public:
 
        string getName() const;
        double getNorm() const;
        double getPrice() const;
 
    friend ofstream& operator<<(ofstream &out, const ConsumerBasket &obj) {
        out << obj.getName() << " " 
            << obj.getNorm() << " " 
            << obj.getPrice() << "\n";
        return out;
    }
 
    friend ifstream & operator>>(ifstream &in , ConsumerBasket &obj) { 
        in >> obj.p_name 
           >> obj.c_rate 
           >> obj.p_price;
        return in;
    }
};
 
int main() {
    ifstream input("input.txt");
    ofstream out("output.txt");
    int size;
    input >> size;
    ConsumerBasket* goods = new ConsumerBasket[size];
    for (int i = 0; i < size; ++i) {
        input >> goods[i];
    }
    for (int i = 0; i < size; ++i) {
        for (int j = size - 1; j > i; --j) {
            if (goods[j].getPrice() < goods[j-1].getPrice()) {
                ConsumerBasket temp = goods[j];
                goods[j] = goods[j-1];
                goods[j-1] = temp;
            }
        }
    }
    for (int i = 0; i < size; ++i) {
        out << goods[i];
    }
    input.close();
    out.close();
    delete [] goods;
    return 0;
}
 
string ConsumerBasket::getName() const {
    return p_name;
}
 
double ConsumerBasket::getNorm() const {
    return c_rate;
}
 
double ConsumerBasket::getPrice() const {
    return p_price;
}
Добавлено через 1 минуту
Azazel-San, да, это ошибка, я торопился. Но дело не в этом. Сейчас только что код выложил с рабочей идеей. Пост 32.

Добавлено через 2 минуты
Цитата Сообщение от _stanislav Посмотреть сообщение
Fixer_84, так что ли
_stanislav, да, так тоже работает.

Вообщем, теперь у меня три варианта кода. Буду их хранить и, если что-то подсматривать. Всем большое спасибо Надеюсь, больше ошибаться в этом месте не буду.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
22.02.2019, 19:04
Fixer_84, любишь друзей, твои проблемы
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
22.02.2019, 19:30  [ТС]
В итоге вот эти два варианта рабочие:

Вариант 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
/*
Дан текстовый файл с информацией о потребительской корзине. 
Создать класс для описания продуктов (название, норма употребления, цена). 
Считать данные с файла, отсортировать по цене и записать в другой файл. 
На экран вывести суммарную стоимость у потребительской корзины.
*/
 
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
 
using namespace std;
 
class ConsumerBasket {
 
private:
 
    string p_name;
    int c_rate;
    double p_price;
 
public:
 
    ConsumerBasket(string name, int rate, double price) : p_name(name)
                                                        , c_rate(rate)
                                                        , p_price(price) {}
    double getPrice() { return p_price; }
    friend ofstream& operator<<(ofstream &out, const ConsumerBasket &obj);
};
 
ofstream& operator<<(ofstream &out, const ConsumerBasket &obj) {
    out << obj.p_name << " "
        << obj.c_rate << " "
        << obj.p_price << "\n";
    return out;
}
 
int main() {
    ifstream in("input.txt");
    ofstream out("output.txt");
    string name;
    int n, rate;
    double sum, price;
    in >> n;
    vector<ConsumerBasket> goods;
    sum = 0.0;
    for(int i = 0; i < n; i++) {
        in >> name >> rate >> price;
        sum += price;
        ConsumerBasket obj(name, rate, price);
        goods.push_back(obj);
    }
    for(int i = 0; i < n; i++) {
        for(int j = n - 1; j > i; j--) {
            if (goods[j].getPrice() < goods[j-1].getPrice()) {
                swap(goods[j], goods[j-1]);
            }
        }
    }
    cout << "Output of the program:\n";
    cout << "Total price: " << sum << "\n";
    for(int i = 0; i < n; ++i) {
        out << goods[i];
    }
    in.close();
    out.close();
    system("pause");
    return 0;
}
Вариант 2:

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
/*
Дан текстовый файл с информацией о потребительской корзине. 
Создать класс для описания продуктов (название, норма употребления, цена). 
Считать данные с файла, отсортировать по цене и записать в другой файл. 
На экран вывести суммарную стоимость у потребительской корзины.
*/
 
#include <iostream> 
#include <string> 
#include <fstream>
 
    using namespace std;
 
class ConsumerBasket {
 
    private:
 
        string p_name;
        double c_rate;
        double p_price;
 
    public:
 
        string getName() const;
        double getRate() const;
        double getPrice() const;
 
    friend ofstream& operator<<(ofstream &out, const ConsumerBasket &obj) {
        out << obj.getName() << " " 
            << obj.getRate() << " " 
            << obj.getPrice() << "\n";
        return out;
    }
 
    friend ifstream & operator>>(ifstream &in , ConsumerBasket &obj) { 
        in >> obj.p_name 
           >> obj.c_rate 
           >> obj.p_price;
        return in;
    }
};
 
int main() {
    ifstream input("input.txt");
    ofstream out("output.txt");
    int size;
    double sum;
    input >> size;
    ConsumerBasket* goods = new ConsumerBasket[size];
    for (int i = 0; i < size; ++i) {
        input >> goods[i];
        sum += goods[i].getPrice();
    }
    for (int i = 0; i < size; ++i) {
        for (int j = size - 1; j > i; --j) {
            if (goods[j].getPrice() < goods[j-1].getPrice()) {
                ConsumerBasket temp = goods[j];
                goods[j] = goods[j-1];
                goods[j-1] = temp;
            }
        }
    }
    cout << "Output of the program:\n";
    cout << "Total price: " << sum << "\n";
    for (int i = 0; i < size; ++i) {
        out << goods[i];
    }
    input.close();
    out.close();
    delete [] goods;
    return 0;
}
 
string ConsumerBasket::getName() const {
    return p_name;
}
 
double ConsumerBasket::getRate() const {
    return c_rate;
}
 
double ConsumerBasket::getPrice() const {
    return p_price;
}
Как сделать без дружественной не знаю. Но в любом случае всем благодарен за помощь!
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
22.02.2019, 19:34
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Как сделать без дружественной не знаю. Но в любом случае всем благодарен за помощь!
Смотря на ваш код я не вижу ниодного предлога что бы не сделать ваш класс, агрегативным.. Зачем вам тут инкапсуляция?
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
22.02.2019, 19:41  [ТС]
Azazel-San, буду вам признателен, если вы объясните, что это значит. С классами работал очень мало. Знаю только основы.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
22.02.2019, 19:55
Fixer_84, ну, смотрите ООП, как Вы уже наврное слышали стоит на 3 китах(?), это инкапсуляция, наследование и полиморфизм (есть еще 4 но не важно).
Инкапсуляция это когда мы на уровне договоренности между собой (под собой иммею ввиду программистов) говорим, что некоторые данные будут скрыты от внешнего мира в С++ этим служат индентефикаторы доступа private & protected.
И вроде все круто, но приватные поля заставляют вас писать конструкторы и сеттеры/геттеры что не очень круто, а если у нас полей 10, то что для каждого писать отдельный такой геттер и сеттер? (ну конечно такой вопрос уже относится к проектированию и архитектурным вопросам, мол если у вас такая ситуация то вы где-то натупили).

Так вот, если ваш класс служит только для того чтобы сгруппировать некие данные его можно спокойно сделать аггрегативным или же POD-типом.
https://en.cppreference.com/w/... eq/PODType
В С++ такие классы или структуры имеют много плюшек в виде удобности инициализации и доступа в полям.

Интересного чтива
https://stackoverflow.com/ques... ey-special

Добавлено через 4 минуты
Цитата Сообщение от Fixer_84 Посмотреть сообщение
можно ли как-то в коде ниже сделать переменные класса приватными, а не публичными
Вот у вас был вопрос, можно ли? Но вы обдумали зачем вы это хотите сделать, я веду к тому что зачем делать то, что не имеет веского основания что бы это сделать?
Были ли у вас веские предлоги делать поля приватными, если нет смотрите в сторону POD-типов, имхо.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
22.02.2019, 20:34  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
Были ли у вас веские предлоги делать поля приватными
Я слышал, что это общепринятая практика, делать поля приватными, а методы публичными. У меня не хватает пока практики, чтобы разбираться когда и какие поля выбирать, просто стараюсь придерживаться общепринятых договоренностей. А про POD я обязательно прочитаю. Спасибо.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2019, 21:44
Fixer_84, практика сокрытия данных состоит в заботе о поддержании инварианта. Это набор ограничений налагаемый логикой отображаемой объектом. То есть, если вы не хотите чтобы у вашего консумера был пол женский, а имя Герасим, то нужно об этом позаботиться. Хотя тут нужно со словарём имён возиться. Проще пример - отслеживать чтобы цена не была отрицательной, например. Поэтому лучше все проверки делать (в сеттерах например). Таким образом, ввод в поля класса это не слишком удачная затея. Дружественность для операторов используется, обычно, не для преодоления сокрытия. Это делается для того, чтобы можно было сделать объект правым операндом бинарной операции. В частности для сравнения объектов с объектами других типов, сложения и.т.п. (если не существует неявного приведения). Оператор смещения тоже можно использовать, но лучше это делать на целом объекте (а не на отдельных полях) а внутри оператора вызывать проверочные методы и обрабатывать неверный ввод. Как вариант, можно просто выводить значение из введенной временной переменной и переспрашивать :"Вы уверены, что имя этой барышни Афанасий Y N ?". Это нудно всё, но может и понравится.
Можно например иметь проверяющий метод, который обрабатывает весь дата сет. Оператор собирает данные от пользователя, достаёт его, если что-то не так, а потом сетит поля.
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
22.02.2019, 22:15  [ТС]
IGPIGP, вы правы. Нужно почаще задавать вопросы зачем и почему я это делаю. Сейчас читал о случаях применения дружественной функции. Под данный случай она не попадает. Получилась некая "уловка" с обходом приватных полей. Впрочем, для этого такая функция и нужна, но не в данном случае, так как можно было бы обойтись сеттерами. Они для этого и нужны, чтобы получать доступ к приватным полям.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.02.2019, 22:15
Помогаю со студенческими работами здесь

Дружественная шаблонная функция шаблонного класса
Не компилируется. Подскажите правильный синтаксис. template&lt;typename T&gt; class A; template&lt;typename T, typename ... Args&gt; void...

Дружественная статическая функция из другого класса
у меня есть класс Info , объект которого имеет поля ключ и значение , оба типа std::string допустим я запущу сначала команду set q 1 и в...

Дружественная функция-оператор, доступ к закрытым полям класса
У меня есть класс MyClass, вот код: class MyClass { int x, y; public: MyClass(); friend ostream &amp; operator &lt;&lt;...

Преобразование типа аргумента в тип класса и дружественная функция
Добрый день. Есть код: class Cls { private: double x; public: Cls(); Cls(double);

Дружественная функция не может получить доступ к приватным данным класса
Доброго времени суток уважаемые форумчане), пытаюсь реализовать дружественную функцию которая берет данные из двух классов, но компилятор...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru