Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452

Класс - друг

25.04.2015, 13:46. Показов 2856. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня !!!

Столкнулся с проблемой при обьявлении класса Dasa другом класса Da.


В классе Da есть функция void nes ()

С помощью этой функции пытаюсь вызвать функцию void dasaha() класса Dasa.

Получаю 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
#include <stdio.h>
#include <conio.h>
class Dasa
{
public:
    friend class Da;
    void dasaha()   
    {
        printf("***** dasaha()  Dasa\n\n");
    }
    Dasa()  {printf("***** Dasa const\n\n");}  
    ~Dasa() {}
};
class Da 
{
public:
    void da() {printf("***** da() Da\n\n");}
    void nes () {dasaha();}
    Da()  {printf("***** Da const\n\n");} 
    ~Da() {}
};
int main()
{ 
    Da f;
    f.nes();
    getch();
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2015, 13:46
Ответы с готовыми решениями:

Класс-друг
#include &lt;iostream&gt; using namespace std; class first { public: friend second; private: int First; };

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

Класс - друг. Доступ к полям и методам
Есть два класса: MainWindow и LBM_computation, в одном из них происходят вычисления. Класс MainWindow - для визуализации. Надо сделать так,...

44
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.04.2015, 17:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от RAFA91 Посмотреть сообщение
объекты класса other разве могут вызывать методы и данные класса some ?
мы же в вышеприведенных примерах создавали временные обьекты класса some
вам нужно понять, что такое "класс".
класс - это описание типа.

физически, данные-члены класса существуют в объектах этого класса:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct some
{
    int val; //<--- у объектов класса 'some' есть поле 'val' 
           // которое имеет тип 'int'
};
 
...
 
some s; //<--- создаем объект
 
s.val = 10; //<--- и у этого объекта есть поле 'val'
   // которое является собственностью этого конкретного объекта
   // поскольку в классе поле объявлено в public,
   // то снаружи мы можем получать к нему доступ,
   // и изменять его содержимое
когда говорят "получить доступ к данным-членам класса",
то имеют ввиду "получить доступ к данным-членам конкретного объекта этого класса".

когда говорят "запустить функцию-член класса",
то имеют ввиду "запустить функцию-член класса для конкретного объекта этого класса".
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.04.2015, 17:26
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Как раз из реальной практики. Хотя с тех пор действительно могло и это поменяться.
Скорее всего просто память подводит. Т.к. никогда не было такого, чтобы доступ ограничивался той секцией, где указано friend ClassName;. Друг класса имеет и всегда имел полный доступ к полям класса, который сделал его другом. Совершенно не важно в какой секции это написано.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
26.04.2015, 14:44  [ТС]
Спасибо !!! Для надежности повторю пройденный материал.на примере животных

Добавлено через 21 час 16 минут
Хотел вернуться к вчерашней проблеме по поводу класса друга.

сегодня решил сделать другом не другой класс ,а метод этого класса.

В данном случае nes (Dasa & hj) .

При выполнении метода void nes (Dasa & hj) вновь ошибка.

По идет все логично в тексте. Подскажите пожалуйста где я мог накосячить ?

________________________________________ _______________________________

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 <stdio.h>
#include <conio.h>
 
 
 
 
class Dasa
 
{
 
private:
 
    void dasaha()   
    
    {
        
        
        printf("***** dasaha()  Dasa\n\n");
    
    }
 
 
    friend void Da :: nes(Dasa & hj);
 
 
public:
 
    
 
    void asaha()   
    
    {
        
        
        printf("***** asaha()  Dasa\n\n");
    
    }
 
    
    
    Dasa()  {printf("***** Dasa const\n\n");}  
 
    ~Dasa() {printf("***** Dasa dest\n\n");}
 
    
};
 
class Da 
 
{
    
 
 
public:
 
    
 
    void da() {printf("***** da() Da\n\n");}
 
    
 
    void nes (Dasa & hj) {hj.dasaha() ;}
    
    Da()  {printf("***** Da const\n\n");} 
 
    ~Da() {}
 
    
};
 
int main()
 
{ 
    Da f;
 
    Dasa fj;
 
    f.nes(fj);
 
getch();
    
    return 0;
 
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.04.2015, 14:50
Цитата Сообщение от RAFA91 Посмотреть сообщение
Подскажите пожалуйста где я мог накосячить ?
Во-первых, что за шедрость на пустые строки?
Во-вторых, не помешали бы человеческие имена.
В-третьих, нужна предварительная декларация.
http://ideone.com/4or4fb
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.04.2015, 14:52
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
#include <stdio.h>
 
 
class Dasa;
 
class Da 
{
public:
    void da() {printf("***** da() Da\n\n");}
    void nes(Dasa& hj);
    
    Da() {printf("***** Da const\n\n");} 
   ~Da() {}
};
 
class Dasa
{
    void dasaha(){ printf("***** dasaha()  Dasa\n\n"); }
 
    friend void Da::nes(Dasa & hj);
public:
    void asaha() { printf("***** asaha()  Dasa\n\n"); }
    Dasa() {printf("***** Dasa const\n\n");}  
   ~Dasa() {printf("***** Dasa dest\n\n");}
};
 
 
void Da::nes(Dasa& hj) {hj.dasaha() ;}
 
int main()
{ 
    Da f;
    Dasa fj;
    f.nes(fj);
}
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
26.04.2015, 15:06  [ТС]
Tulosba я пока занимаюсь тестированием возможностей С++
hoggy спасибо Вам за помощь - теперь все хорошо.
Не понял только для чего делать эти перемещении классов ?
При обьявлении класса Da другом класса Dasa таких перемещений не требовалось, а при обьявлении лишь одной функции другом требуется такая путаница.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.04.2015, 15:12
Цитата Сообщение от RAFA91 Посмотреть сообщение
Не понял только для чего делать эти перемещении классов ?
представьте себе, что вы компилятор.
вам на вход подается текстовый файл с исходным кодом.
ваша задача - распарсить этот код, и сгенерировать машинный код.

итак, вы получаете файл, и начинаете анализировать строчку за строчкой:

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
#include <stdio.h>
#include <conio.h>
 
 
 
 
class Dasa
 
{
 
private:
 
    void dasaha()   
    
    {
        
        
        printf("***** dasaha()  Dasa\n\n");
    
    }
 
 
    friend void Da :: nes(Dasa & hj); //<--- вы дошли до сюда
    // теперь ответьте на вопрос, что это такое?
   // нигде выше по коду не было никаких классов с именем Da
   // как прикажите компилятору догадаться, что здесь имеется ввиду?
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
26.04.2015, 17:05  [ТС]
как я понял функция друг должна быть размещена сразу за классом Dasa ?

в принципе все логично функция nes(Dasa & hj) идет за класссом Dasa , а предсказать на перед комппилятор по ходу не может.

Добавлено через 1 час 24 минуты
________________________________________ __________

опять какая-то непонятица (((

почему , когда я перемещаю void Da :: nes(Dasa & hj) {hj.dasaha() ;} выше класса Dasa , то опять получаю ошибку ?

ведь теперь void nes (Dasa & hj); обьявленно раньше класса Dasa

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
#include <stdio.h>
#include <conio.h>
 
class Dasa;
 
 
 
class Da 
 
{
    
public:
 
    void da() {printf("***** da() Da\n\n");}
 
    void nes (Dasa & hj); 
    
    Da()  {printf("***** Da const\n\n");} 
 
    ~Da() {}
};
 
 
void Da :: nes(Dasa & hj)
 
{hj.dasaha() ;}
 
 
class Dasa
 
{
 
private:
 
    void dasaha()   
    
    {
        printf("***** dasaha()  Dasa\n\n");
    
    }
 
 
    friend void Da :: nes(Dasa & hj);
 
public:
 
    void asaha()   
    
    {
        printf("***** asaha()  Dasa\n\n");
    
    }
    
    Dasa()  {printf("***** Dasa const\n\n");}  
 
    ~Dasa() {printf("***** Dasa dest\n\n");}
 
    
};
 
 
int main()
 
{ 
    Da f;
 
    Dasa fj;
 
    f.nes(fj);
    
    getch();
    
    return 0;
 
}
Добавлено через 15 минут
как бы это смешно не выглядело , но этот вариант работает нормально..

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
#include <stdio.h>
#include <conio.h>
 
 
class Dasa
 
{
 
private:
 
    void dasaha()   
    
    {
        printf("***** dasaha()  Dasa\n\n");
    
    }
 
 
    friend void  nes(Dasa & hj);
 
public:
 
    
    
    Dasa()  {printf("***** Dasa const\n\n");}  
 
    ~Dasa() {printf("***** Dasa dest\n\n");}
 
    
};
 
 
void nes(Dasa & hj)
 
{
    hj.dasaha() ;
 
}
 
 
int main()
 
{ 
    
 
    Dasa fj;
 
    nes(fj);
    
    getch();
    
    return 0;
 
}
void nes(Dasa & hj)

{
hj.dasaha() ;

}

идет за классом ....

почему же в этом случае компилятор умнее чем в вышеприведенной проблеме ?
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
21.06.2015, 13:45  [ТС]
Всем доброго дня !!!

Столкнулся с проблемой при обьявлении класса B другом класса А.

В классе B есть функция
C++
1
void ans (const A <int> & nak) const
Когда <int> меняю на <T> , то получаю ошибки .

Подскажите пожалуйста , что нужно добавить для исключения этих ошибок.

Заранее спасибо !!!

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
#include <stdio.h>
#include <conio.h>
#include<iostream>
 
using namespace std;
 
 
 
template <class T>
 
class A
 
{
 
private:
 
    void fav() const {printf("\nclass A private %p\n",this);}
 
    T x;
 
    friend class B;
 
public:
 
    A(T a) : x(a) {printf("\nKONSTRUKTOR A %p\n",this);}
 
    ~A() {printf("\nDESTRUKTOR A %p\n",this);}
 
    void amx() const 
    
    {
        printf("\nclass A public %p *** ",this);
 
        cout << x <<"\n";
    }
};
 
class B
 
{
 
private:
 
    void fma() const {printf("\nclass B private %p\n",this);}
 
public:
 
    B() {printf("\nKONSTRUKTOR B %p\n",this);}
 
    ~B() {printf("\nDESTRUKTOR B %p\n",this);}
 
    void ans (const A <int> & nak) const
    
    {
        printf("\nclass B public %p\n",this);
 
        fma();
 
        nak.amx();
 
        nak.fav();
    }
};
 
int main()
 
{
    B  b;
 
    A <int> n(100);
 
    A <char> k('P');
 
    printf("\n***** b = %p n = %p k = %p\n",&b,&n,&k);
 
    b.ans(n);
 
    printf("\n**********************\n");
 
    n.amx();
 
    k.amx();
 
    getch();
 
    return 0;
}
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.06.2015, 14:02
Цитата Сообщение от RAFA91 Посмотреть сообщение
Когда <int> меняю на <T> , то получаю ошибки .
Подскажите пожалуйста , что нужно добавить для исключения этих ошибок.
http://rextester.com/STUB79557

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
#include <stdio.h>
#include<iostream>
using namespace std;
 
 
template <class T> class A
{
    void fav() const {printf("\nclass A private %p\n",this);}
 
    T x;
    friend class B;
 
public:
    A(T a) : x(a) {printf("\nKONSTRUKTOR A %p\n",this);}
   ~A() {printf("\nDESTRUKTOR A %p\n",this);}
 
    void amx() const 
    {
        printf("\nclass A public %p *** ",this);
        cout << x <<"\n";
    }
};
 
class B
{
private:
 
    void fma() const {printf("\nclass B private %p\n",this);}
 
public:
 
    B() {printf("\nKONSTRUKTOR B %p\n",this);}
   ~B() {printf("\nDESTRUKTOR B %p\n",this);}
 
    template<class T>
    void ans (const A<T> & nak) const
    {
        printf("\nclass B public %p\n",this);
        fma();
        nak.amx();
        nak.fav();
    }
};
 
int main()
 
{
    B  b;
    A <int> n(100);
    A <char> k('P');
    printf("\n***** b = %p n = %p k = %p\n",&b,&n,&k);
 
    b.ans(n);
    printf("\n**********************\n");
 
    n.amx();
    k.amx();
}
1
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.06.2015, 14:02
Цитата Сообщение от RAFA91 Посмотреть сообщение
A <int> n(100);
Когда вот здесь <int> на <T> меняешь ошибку получаешь?
так и должно быть. Шаблон ну по аналогии работает примерно как функция, т.е. то что <T> в коде шаблона - формальный параметр, то что в создании переменной типа A<int> - int - фактический параметр. т.е. фактически встретив такое объявление компилятор возьмет шаблон, подставит вместо T int и скомпилирует класс. Если встретит a<char> то подставит вместо T char и скомпилирует еще один класс, т.е. получается один раз пишется алгоритм под любые типы данных, а под фактические типы компилятор код копипастит. Но тип естесвенно надо указывать при объявлении переменной типа. Если напаисать A<T> в main то будет ошибка что тип T неизвестен.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
21.06.2015, 14:51  [ТС]
hoggy спасибо Вам большое.

такую мелочь не учел как
C++
1
template<class T>
перед
C++
1
void ans (const A <T> & nak) const
по началу поставил
C++
1
template<class T>
перед class B и получил кучу ошибок.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Когда вот здесь <int> на <T> меняешь ошибку получаешь?
ну конечно.

Добавлено через 36 минут
Решил сделать class B шаблоном

class B по прежнему друг classа А

Опять какая-то непонятная логическая ошибка.

Подскажите пожалуйста почему теперь 5 ошибок ?

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
#include <stdio.h>
#include <conio.h>
#include<iostream>
 
using namespace std;
 
 
 
template <class T> class A
 
{
 
private:
 
    void fav() const {printf("\nclass A private %p\n",this);}
        T x;
        friend class B;
 
public:
 
    A(T a) : x(a) {printf("\nKONSTRUKTOR A %p\n",this);}
        ~A() {printf("\nDESTRUKTOR A %p\n",this);}
        void amx() const 
    {
              printf("\nclass A public %p *** ",this);
              cout << x <<"\n";
         }
};
 
 
 
template <class T> class B
 
{
 
private:
 
    void fma() const {printf("\nclass B private %p\n",this);}
        T x;
 
public:
 
    B(T a) : x(a) {printf("\nKONSTRUKTOR B %p\n",this);}
        ~B() {printf("\nDESTRUKTOR B %p\n",this);}
         template <class T>
         void ans (const A <T> & nak) const
          {
        printf("\nclass B public %p ********* ",this);
                cout << x <<"\n";
                fma();
               nak.amx();
               nak.fav();
    }
};
 
int main()
 
{
    B <int> b(923);
 
    A <int> n(100);
 
    A <char> k('P');
 
    printf("\n***** b = %p n = %p k = %p\n",&b,&n,&k);
 
    b.ans(n);
 
    printf("\n**********************\n");
 
    n.amx();
 
    k.amx();
 
    getch();
 
    return 0;
}
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.06.2015, 15:05
Цитата Сообщение от RAFA91 Посмотреть сообщение
одскажите пожалуйста почему теперь 5 ошибок ?
Укажи какой именно из классов B объявляешь другом. Поскольку класс B - шаблон то их теперь бесконечное множество.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
21.06.2015, 15:17  [ТС]
так что-ли ?

C++
1
friend class B <T>;
теперь ошибок стало 11 (((
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.06.2015, 15:31
он ничего ни про какой класс B б пока что ничего не знает. Добавь форвард-декларацию B перед A;
Добавь в 7-ю строку:
C++
1
template <class T> class B;
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
21.06.2015, 15:37  [ТС]
Fulcrum_013 действительно это помогло.

большое Вам спасибо за помощь !

только почему не надо было ставить
C++
1
class B;
перед
C++
1
template <class T> class A
когда класс В небыл шаблоном , но был другом класса А ?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.06.2015, 16:20
потому что когда он искал просто класс он понимал что если его еще нет, то он может где то появиться, а если появится то ему надо обеспечить доступ.
А когда ищется шаблон надо конкретизировать какой. соответсвенно используя форвард-декларацию даем компилятору возможность увидеть как именно будет параметризирован этот друг.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
21.06.2015, 17:42  [ТС]
Fulcrum_013 большое спасибо за помощь !

буду думать.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.06.2015, 20:50
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
он ничего ни про какой класс B б пока что ничего не знает. Добавь форвард-декларацию B перед A;
не обязательно.

Цитата Сообщение от RAFA91 Посмотреть сообщение
Опять какая-то непонятная логическая ошибка.
объявление друга - само по себе является форвардом
поэтому, можно и без форвардов:

http://rextester.com/DVQFTV39891

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
#include <stdio.h>
#include<iostream>
 
using namespace std;
 
 
 
template <class T> class A
 
{
 
private:
 
    void fav() const {printf("\nclass A private %p\n",this);}
        T x;
        
    template<class U>
    friend class B;
 
public:
 
    A(T a) : x(a) {printf("\nKONSTRUKTOR A %p\n",this);}
        ~A() {printf("\nDESTRUKTOR A %p\n",this);}
        void amx() const 
    {
              printf("\nclass A public %p *** ",this);
              cout << x <<"\n";
         }
};
 
 
 
template <class T> class B
 
{
 
private:
 
    void fma() const {printf("\nclass B private %p\n",this);}
        T x;
 
public:
 
    B(T a) : x(a) {printf("\nKONSTRUKTOR B %p\n",this);}
        ~B() {printf("\nDESTRUKTOR B %p\n",this);}
         
        template <class U>
         void ans (const A <U> & nak) const
          {
        printf("\nclass B public %p ********* ",this);
                cout << x <<"\n";
                fma();
               nak.amx();
               nak.fav();
    }
};
 
int main()
 
{
    B <int> b(923);
 
    A <int> n(100);
 
    A <char> k('P');
 
    printf("\n***** b = %p n = %p k = %p\n",&b,&n,&k);
 
    b.ans(n);
 
    printf("\n**********************\n");
 
    n.amx();
 
    k.amx();
 
 
    return 0;
}
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.06.2015, 21:41
Цитата Сообщение от hoggy Посмотреть сообщение
template<class U>
* * friend class B;
А вот это ошибка (или может быть серьезной ошибкой). так фриендом будут все B<U>, т.е. B<char> будет фриендом как A<int> так и A<float> так и A<char>. А при форварде четко по типам, т.е. B<char> будет фриендом только для A<char>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.06.2015, 21:41

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... Разработать абстрактный класс класс...

Отдельно класс данных, класс формул и главный класс
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...

Cоздать класс для объектов и сравнить объекты с друг другом
Надо создать 2 объекта, создать класс для объектов и сравнить объекты с друг другом, вот такое задание, не могу правильно сделать, всегда...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru