Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Lordif
21 / 21 / 4
Регистрация: 18.04.2010
Сообщений: 87
#1

Доступ к переменным - C++

31.05.2012, 23:09. Просмотров 465. Ответов 8
Метки нет (Все метки)

Есть иерархия классов:
C++
1
2
3
4
5
6
7
8
9
10
class base{
 int a;
};
class der : private base{
 void f(){
  //Необходимо использовать переменную base::a
  //Но постоянно писать base:: утомляет и код становится нечитабельным
  //Как можно это обойти?
 }
};
Добавлено через 34 минуты
Помогите пожалуйста, вопрос же несложный.
http://www.cyberforum.ru/cpp-beginners/thread1193205.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 23:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Доступ к переменным (C++):

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

Доступ из статической функции к не стачисеским переменным
Добрый день! Имеется класс со статической функцией, как получить доступ, из...

Доступ к переменным базового класса при наследовании
Есть следующий код class Base { protected: int x; Base* enemy; ...

Friend функции не имеют доступ к закрытым переменным
Всем привет. Изучаю c++ по Липпману 5-ое издание. Там на стр. 351-352...

Доступ к переменным в DLL программе из внешних програм
Подскажите пожалуйста, как реализовать Записать данные из программы №1 в...

8
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
31.05.2012, 23:17 #2
По идеи вот так должно сработать.
C++
1
2
3
4
5
6
7
8
9
class base{
 int a;
};
class der : private base{
 void f(){
   using base::a;
   a = 10;
 }
};
Добавлено через 53 секунды
Только 'a' должна быть объявлена как public или der должен быть дружественным классом.
0
mad_svyat
17 / 17 / 15
Регистрация: 10.01.2012
Сообщений: 34
31.05.2012, 23:19 #3
Юзай директиву препроцессора #define, например. Вместо A можешь присвоить любое другое название.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
class base{
public:
    int a;
};
 
#define A base::a
class der : private base{
 void f(){
  //Необходимо использовать переменную base::a
  //Но постоянно писать base:: утомляет и код становится нечитабельным
  //Как можно это обойти?
     A = 0;
 }
};
 
int main()
{
    return 0;
}
0
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
31.05.2012, 23:22 #4
А стоп. Так она даже не static. Покажите как именно вы хотите использовать ее.

Добавлено через 2 минуты
Так ладно, тот код что я выше привел - бред, так как base не пространство имен, не обращайте на него внимания. Пора идти отдыхать.
0
Lordif
21 / 21 / 4
Регистрация: 18.04.2010
Сообщений: 87
31.05.2012, 23:36  [ТС] #5
Как хочу использовать... Ну, по-прямому назначению
C++
1
int c = base::a + 5;
0
antoha398
156 / 156 / 27
Регистрация: 29.03.2012
Сообщений: 418
31.05.2012, 23:40 #6
Цитата Сообщение от Lordif Посмотреть сообщение
Ну, по-прямому назначению
по прямому назначение это так:
C++
1
2
base b1;
int c = b1.a + 5;

base::a это обращение к статической переменной.
0
Lordif
21 / 21 / 4
Регистрация: 18.04.2010
Сообщений: 87
01.06.2012, 09:07  [ТС] #7
У меня иерархия классов и доступ необходим в функции класса, поэтому это обращение не к статической переменной.

Добавлено через 2 минуты
Может можно как то использовать typedef или typename (вообще не понимаю в каких случаях и зачем они нужны)

Добавлено через 8 часов 17 минут
Помогите пожалуйста

Добавлено через 1 час 1 минуту
Проблема решена
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
01.06.2012, 11:05 #8
А слабо объявить тип доступа к a не private:, а protected:!!!!!
private члены класса закрыты для производного класса!!!!!!!
0
Lordif
21 / 21 / 4
Регистрация: 18.04.2010
Сообщений: 87
01.06.2012, 11:37  [ТС] #9
Именно так и решил проблему)
0
01.06.2012, 11:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2012, 11:37
Привет! Вот еще темы с решениями:

"Двойной" доступ к переменным класса
Господа, прошу совета в изложенной ниже ситуации. Часто мне встречается в...

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

Префиксы к переменным
собстно какие вы используете и для чего/где ? может кто-нибудь не понял о...

std::vector доступ по индексу vs доступ по итератору
std::vector&lt;int&gt; tmp; int i = 0; tmp.resize(1000000); ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru