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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
#1

Почему сын может спокойно работать с полями privat отцовского класса (опять template <class T> воду мутит!) - C++

06.06.2011, 18:57. Просмотров 462. Ответов 4
Метки нет (Все метки)

Сабж
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class otets {
 public:
  otets (){};
 private:
  int znach;
};
 
template <class T>
class sinn: public otets {
 public:
  sinn ():otets () {otets::znach= 9;}
};
 
int main() {
}
Это
C++
1
otets::znach= 9;
не должно компилиться. Но оно компилится. Почему?
Так, а закомментим //template <class T> и прога будет работать предсказуемо, ибо znach всё-таки закрытое поле тык скыть.
...template <class T> обладает какой-то магией и живёт своей жизнью!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2011, 18:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему сын может спокойно работать с полями privat отцовского класса (опять template <class T> воду мутит!) (C++):

базовый и производный класс, в базовом объявлена переменная "protected", она недоступна по имени в производном классе! template <class T> воду мутит! - C++
Друзья! Вот код #include &lt;stdio.h&gt; template &lt;class T&gt; class otets { protected: int peremennaya; }; template &lt;class...

внук родительского класса не может работать с полями дедовского класса; почему? - C++
Не всё так просто на самом деле. Непонятно, какую роль во всём этом играют шаблоны. Но к делу. Вот код: class base { public: base...

Не могу обратиться к Privat члену класса из ф-и Friend. Почему? - C++
не нашел ответ на свой вопрос... есть класс class Product { char cmName, cmType; double cmPriceIn, cmPriceOut; ...

Не пойму конструкцию template <template <class T> class X> - C++
Что это за шаблон такой?

Friend template class with template class argument - C++
Помогите подружить 2 класса: Имеется класс Student: template &lt;class _T&gt; class Faculty; class Student{ friend...

Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier - C++
Решил подправить свой класс с использованием шаблонов, но столкнулся со следующим косяком. Если я прописываю тело функций внутри описания...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
06.06.2011, 19:08 #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
// test.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class otets {
 public:
     otets (): znach(3) {};
 private:
  int znach;
};
 
template <class T>
class sinn: public otets {
 public:
     sinn (): otets () { 
         otets::znach= 9;
     }
};
 
int main() {
    sinn<int> i;
}
Добавлено через 41 секунду
шаблоны компилируются по особенному. Попробуй создать объект и он пошлёт тебя

Добавлено через 4 минуты

Не по теме:


вот так вот в обход интерфейса класса можно изменить приватное поле...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class otets {
 public:
     otets (): znach(3) {};
 private:
  int znach;
};
 
template <class T>
class sinn: public otets {
 public:
     sinn (): otets () { 
         int* i = reinterpret_cast<int*>(this);
         (*i)++;
     }
};
 
int main() {
    sinn<int> i;
}

2
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
06.06.2011, 19:09  [ТС] #3
Да уж... Действительно откровение. А как по особеному? Ну то есть я и по обыкновенному-то не знаю как. Знаю, что синтакис проверит. А тут какие-то неписанные синтаксические правила... Да так-то я protected могу написать...
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
06.06.2011, 19:15 #4
а что компилятору компилировать он ведь не знает до того момента, пока ты явно не создашь объект своего класса. В template<t> t может быть любым. Нет объекта - нечего компилировать. Это вкратце
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
06.06.2011, 19:23  [ТС] #5
Не, ну так-то можно было заметить и запретить обращение к приватному полю родительского класса БЕЗУСЛОВНО, без создания объектов. Хотя им там наверху виднее.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2011, 19:23
Привет! Вот еще темы с ответами:

'MyQueue' : use of class template requires template argument list - C++
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки 'MyQueue' : use of class template...

В чем различие template <typename T> от template <class T> ? - C++
Добрый день ! Заметил в новых книгах применение записи template &lt;typename T&gt; вместо template &lt;class T&gt; в чем же тогда фишка...

Почему может не работать? - MS Access
На этапе редактирования внешнего вида кнопок и самой формы, столкнулась вот с такой проблемой. Кнопки отвечающие за соответсвующие функции...

Почему может не работать с++? - C++
решил изучить С++. попытался скачать Microsoft Visual Studio. не с одного ресурса качал, но всегда в самом конце установки выбивало ошибку....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.06.2011, 19:23
Ответ Создать тему
Опции темы

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