Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полиморфный класс и наследование 
:(
    Опции темы
and277
Дата 27.5.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Привет всем.
Разбираю книжный пример с RTTI

Код

#include <iostream>
#include <cmath>
#include <typeinfo>
using namespace std;

template <class T> class Num
{
public:
    T x;
    Num(T i) {x = i;}
    virtual T get_val() {return x;}
};

template <class T> class Squary: public Num<T>
{
public:
    Squary(T i): Num<T>(i) {}
    T get_val() {return Num<T>::x * Num<T>::x;}
};

template <class T> class Sqr_root: public Num<T>
{
public:
    Sqr_root(T i): Num<T>(i) {}
    T get_val() {return sqrt((double)Num<T>::x);}
};


Есть вопрос:
1)  Почему внутри шаблонов Squary и Sqr_root , а конкретно в вирт функциях get_val() обоих классов чтобы не вознкало ошибки компиляции связанной с невидением члена T x , необходимо ставить оператор области видимости 
Num<T>::    ?     Ведь спецификатор наследования public у обоих классов имеется. 

PM MAIL   Вверх
zim22
Дата 27.5.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(and277 @  27.5.2009,  11:53 Найти цитируемый пост)
Разбираю книжный пример с RTTI

RTTI в вашем примере нет.

Цитата(and277 @  27.5.2009,  11:53 Найти цитируемый пост)
 необходимо ставить оператор области видимости 

кому необходимо? оно и так компилится.
Код

template <class T> class Num
{
public:
    T x;
    Num(T i) {x = i;}
    virtual T get_val() {return x;}
};

template <class T> class Square: public Num<T>
{
public:
    Square(T i): Num>(i) {}
    T get_val() {return x * x;}
};

template <class T> class Sqr_root: public Num<T>
{
public:
    Sqr_root(T i): Num(i) {}
    T get_val() {return sqrt((double)x);}
};


Это сообщение отредактировал(а) zim22 - 27.5.2009, 12:08


--------------------
PM MAIL   Вверх
and277
Дата 27.5.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



zim22, проверь на Эклипсе и Дев С++ - там ошибку выдает так как не видит перем "x"
Хотя там mingw все равно.
PM MAIL   Вверх
mes
Дата 27.5.2009, 12:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(and277 @  27.5.2009,  10:53 Найти цитируемый пост)
Num<T>::    ?     Ведь спецификатор наследования public у обоих классов имеется

потому что у шаблонов , члены ищутся только в "прямой области видимости" и для обращения к членам базового класса необходимо указывать область.
(хотя некоторые компиляторы могут находить и сами, как в случае zim22)

Добавлено через 1 минуту и 35 секунд
P.S. название  "Полиморфный класс и наследование" к сути темы отношения не имеет.

Это сообщение отредактировал(а) mes - 27.5.2009, 12:12


--------------------
PM MAIL WWW   Вверх
and277
  Дата 27.5.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



mes, спасибо. Просто читаю мануалы - и везде пишут что никакой разницы между наследованием шаблонов и обычных классов - нету.:(

Добавлено через 5 минут
zim22,  и все же RTTI
Функцию main() я не показал. Но это не важно.
Всем спасибо. 
PM MAIL   Вверх
zim22
Дата 27.5.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(and277 @  27.5.2009,  12:11 Найти цитируемый пост)
проверь на Эклипсе и Дев С++ - там ошибку выдает так как не видит перем "x"

действительно, на mingw не компилится.
в отличие от MSVC 2008 smile


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0913 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.