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

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создать класс время с данными-членами часы, минуты, секунды http://www.cyberforum.ru/cpp-beginners/thread330022.html
отучилась на программиста уже год, но пока что как-то тяжко с заданиями, тем более с классами, не успели пройти их... помогите пожалуйста решить Создать класс время с данными-членами часы, минуты, секунды. Перегрузить операторы сложения, вычитания(подсчет количества секунд между временем), ввода и вывода. Создать функции-члены сложения времени с заданным количеством секунд, вычитания из времени...
C++ Как послать своё сообщение другому приложению? #define WM_MYMESSAGE 2000 void main() { HWND hWnd; hWnd = ::FindWindow(NULL,"MyApp"); ::SendMessage(hWnd,WM_MYMESSAGE,0,0); } http://www.cyberforum.ru/cpp-beginners/thread330016.html
C++ Класс "Студент", реализовать динамический список "Группа студентов"
реализовать динамический список " группа студентов". Узел: -группа -фамилия Функции списка: -добавление по алфавиту -удаление указанного -очистка списка -поиск студента -печать списка
Чтение из файла, запись в файл C++
Тут такая у меня проблема. 1) Не работает цикл в майне. Как его правильно организовать? 2) И, похоже, чтение из файла все-таки, неправильно организовано. 3) И оошшшень хотелось бы поиск в файле как-нить организовать Кто может, помогите или подскажите, пожалуйста) #include<iostream> #include<fstream> #include<iomanip>
C++ двойная буферизация http://www.cyberforum.ru/cpp-beginners/thread329972.html
Здравствуйте. Ребят не сочтите за труд, помогите разобраться. Проблема собственно вот в чём: Пишу тетрис, в окошке находится стакан с фигурами, а на фоне нужно чтобы была некая картинка. Сначала всё сделал с выводом прямо на экран, но столкнулся с миганием окна. Теперь пробую через двойную буферизацию, но, после показа первого расположения падающей фигурки экран совсем не меняется.:wall: Вот...
C++ абстрактный тип данных надо написать на С++... разработать абстрактный тип данных :двусвязный циклический список. атд должен обеспечивать выполнение следующих операций: 1)добавление элемента в список 2)удаление элемента из списка 3)редактирование элемента в списке 4)просмотр нескольких списков 5)объединение нескольких списков 6)определение количества элементов в списке написать демонстрационную программу с... подробнее

Показать сообщение отдельно
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
06.07.2011, 06:42     Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
доступ можно получить только к статическим объектам
можно сделать так
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
template <class T>
class matrix {
 
 friend class diagonal;
 
//Вложенный класс
 public:
 
  class diagonal;
 
 //Объявляем переменную такого класса
 diagonal di;
 
 //Вот эту переменную хотелоь бы изменить в конструкторе вложенного класса
 private:
  static int per;
 
 
};
 
template <class T> int matrix<T>::per = 50;
 
 
template <class T>
class matrix<T>::diagonal {
 public:
  diagonal (){
   //Не изменяеится, говорится что неизвестное использование нестатической переменной per
      per= 90;
  }
};
 
 
int main()
{
 
 
     matrix <int> k;
 
 
}
Цитата Сообщение от kravam Посмотреть сообщение
this->set_per ()= 90;
странная конструкция, учитывая, что this типа B*, а у В* нету никакого set_per
как вариант также можно сделать функцию статической
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
template <class T>
class matrix {
 
 friend class diagonal;
 
//Вложенный класс
 public:
    static T& set_per () {return per;};
  class diagonal;
 
 //Объявляем переменную такого класса
 diagonal di;
 
 //Вот эту переменную хотелоь бы изменить в конструкторе вложенного класса
 private:
  static int per;
 
 
};
 
template <class T> int matrix<T>::per = 50;
 
 
template <class T>
class matrix<T>::diagonal {
 public:
  diagonal (){
       set_per ()= 90;
  }
};
 
 
int main()
{
 
 
     matrix <int> k;
 
 
}
p.s. fasked в твоей предыдущей теме вроде объяснил, что между вложенными классами нет никакой взаимосвязи, которую ты пытаешься провести в своих примерах. По сути класс, в который что-то вкладывают работает как пространство имён и никак иначе. То что ты пытаешься здесь замутить, можно сделать с помощью наследования, либо с помощью статических объектов

Добавлено через 4 минуты
есть вложенный класс который является другом объемлюющего и всё это должно компилиться.
Цитата Сообщение от fasked Посмотреть сообщение
Вложенность позволяет ограничить "область действия" класса.
вот наиболее важная мысля
 
Текущее время: 19:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru