Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
1

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

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

Author24 — интернет-сервис помощи студентам
Сабж
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2011, 18:57
Ответы с готовыми решениями:

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

Почему внук родительского класса не может работать с полями дедовского класса?
Не всё так просто на самом деле. Непонятно, какую роль во всём этом играют шаблоны. Но к делу. Вот...

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

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

4
187 / 174 / 18
Регистрация: 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 минуты

Не по теме:


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

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
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.06.2011, 19:09  [ТС] 3
Да уж... Действительно откровение. А как по особеному? Ну то есть я и по обыкновенному-то не знаю как. Знаю, что синтакис проверит. А тут какие-то неписанные синтаксические правила... Да так-то я protected могу написать...
0
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
06.06.2011, 19:15 4
а что компилятору компилировать он ведь не знает до того момента, пока ты явно не создашь объект своего класса. В template<t> t может быть любым. Нет объекта - нечего компилировать. Это вкратце
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.06.2011, 19:23  [ТС] 5
Не, ну так-то можно было заметить и запретить обращение к приватному полю родительского класса БЕЗУСЛОВНО, без создания объектов. Хотя им там наверху виднее.
0
06.06.2011, 19:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2011, 19:23
Помогаю со студенческими работами здесь

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

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

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

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

Обращение к privat - членам класса из другого класса
Помогите пожалуйста! У меня есть задача. Написал методы которые должны быть в классе...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru