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

базовый и производный класс, в базовом объявлена переменная "protected", она недоступна по имени в производном классе! template <class T> воду мутит! - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Выполнить обработку текста http://www.cyberforum.ru/cpp-beginners/thread318495.html
Друзья, помогите пожалуйста: Выполнить обработку текста из внешнего текстового файла, созданного в редакторе. Результаты обработки поместить во внешний файл.Определить количество слов в каждой строке, сжать каждую строку, удалив все лишние пробелы. Вот я сделал, только эта программа при записи в другой файл, удаляет первые символы строк. #include "StdAfx.h" #include <stdlib.h> #include...
C++ Оверлейные функции Оверлейные функции - это какие? http://www.cyberforum.ru/cpp-beginners/thread318459.html
C++ Вывод на экран точки белого цвета
Вопрос состоит из 3 вопросов. 1. напишите код на С который выводит белую точку. 2. как работает функция printf так что она выводит именно на ЭКРАН. 3. опишите вкратце как управлять с помощью С устройствами типа монитора, звука, принтера и как принимать что-то от клавиатуры.
C++ Упорядочивание элементов массива
Постановка задачи. Разработать программу, которая вводит целочисленную матрицу из n строк и m столбцов (1<n<=100, 1<m<=50) и упорядочивает элементы матрицы. Правило упорядочивания определяется вариантом. Вариант. Упорядочить каждый столбец по убыванию элементов. Решите пожалуйста кому не сложно и если можно с объяснением.
C++ Массивы http://www.cyberforum.ru/cpp-beginners/thread318415.html
Дан массив ненулевых целых чисел размера N. Проверить, образуют ли его элементы геометрическую прогрессию (см. задание Array4). Если образуют, то вывести знаменатель прогрессии, если нет — вывести 0. Дан массив размера N. Найти минимальный из его локальных максимумов (определение локального максимума дано в задании Array33). Даны два массива A и B одинакового размера N. Сформировать новый...
C++ Синтаксический анализ Много кто берётся но мало кто доводит до конца эту тему... Я написал класс Expression смысл которого сводится к тому, чтобы вычислить значение математического выражения переданного в виде string либо сишной строки. В строке можно использовать переменные x и y, так же определены константы pi и e. Расчёт всегда производится в два этапа: 1. разбор строки 2. Расчёт значения. Интерфейс: Определены... подробнее

Показать сообщение отдельно
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,215
Завершенные тесты: 1
13.06.2011, 01:06     базовый и производный класс, в базовом объявлена переменная "protected", она недоступна по имени в производном классе! template <class T> воду мутит!
Цитата Сообщение от kravam Посмотреть сообщение
Ну и сразу вопрос, как грамотнее будет писать для компиляторосовместимости
C++
1
2
3
// ...
this->peremennay = 11;
// ...
Это происходит из-за особенности разрешения неквалифицированных имен внутри шаблонов. Согласно стандарту, компилятор обязан производить поиск там где объявлен или определен шаблон, причем в зависимых базовых классах, поиск не производится.

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
#include <iostream>
 
template <class T> class Base {
protected:
    int foo;
public:
    Base() {
        std::cout << "Base::foo address = " << & this->foo << std::endl;
    }
};
 
template <class T> class Derived : public Base<T> {
public:
    Derived() {
        std::cout << "Derived::foo address = " << & this->foo << std::endl;
    }
 
    void  bar (int value);
};
 
template <class T> void Derived<T>::bar (int value) {
    this->foo = value;
    std::cout << std::endl
        << "Base<T>::foo value " << Base<T>::foo << std::endl
        << "Derived<T>::foo value " << Derived<T>::foo << std::endl
        << "this->foo value " << this->foo << std::endl;
}
 
int main() {
    Derived<int> h;
    h.bar(666);
    return 0;
}
Код
oleg@oleg-laptop:~$ cd src/tmp
oleg@oleg-laptop:~/src/tmp$ g++ main.cpp
oleg@oleg-laptop:~/src/tmp$ ./a.out
Base::foo address = 0xbfb82220
Derived::foo address = 0xbfb82220

Base<T>::foo value 666
Derived<T>::foo value 666
this->foo value 666
oleg@oleg-laptop:~/src/tmp$
 
Текущее время: 11:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru