Russian Qt Forum
Апрель 28, 2024, 17:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с доступом к публик функции от базового класса для производного.  (Прочитано 3002 раз)
Eten
Гость
« : Март 04, 2011, 15:39 »

В общем, приходится вспоминать многое в Си++ (после С# я его немного подзабыл  Строит глазки ). Но к сожалению получается вспомнить не все. Сама проблема в следующем.

У меня есть два класса, один является производным от другого:
Код:
#ifndef DATATYPES_H
#define DATATYPES_H

#include <QString>

    class NDataTypes
    {
    public:
        NDataTypes() {this->_id = -1; this->_name = "";}

        qint32 ID() const {return this->_id;}
        void setID(qint32 ID) {this->_id = ID;}
        QString Name() const {return this->_name;}
        void setName(QString Name) {if (Name != NULL) this->_name = Name; else this->_name = "";}

    protected:
        //если идентификатор равен -1, значит это либо временная переменная, либо константное значение
        qint32 _id;
        //константные или временные значения имен не имеют, только переменные.
        QString _name;
    };

    class NSimpleDataTypes : NDataTypes
    {
    public:
        NSimpleDataTypes() : NDataTypes() {this->_constvalue = false;}

        bool ConstValue() const {return this->_constvalue;}
        void setConstValue(bool ConstValue) {this->_constvalue = ConstValue;}

    protected:
        //это указывает на константное значение
        bool _constvalue;
    };


#endif // DATATYPES_H

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

Код:
//Логический
class NLogical : NSimpleDataTypes
{
public:
    NLogical(bool Value = false) : NSimpleDataTypes() {this->_value = Value;}

    void setValue(bool Value) {this->_value = Value;}
    bool Value() const {return this->_value;}

    operator bool() {return this->Value();}

private:
    bool _value;
};

Но вот следующий код не работает ссылаясь на то, что  класс NSimpleDataTypes не является базовым классом для NLogical и что вызываемая публик функция из базового класса недоступна в ниже следующем контексте. Тоже самое происходит и в отношении публик функций класса NDataTypes по отношению к классу NLogical. А надо, чтобы все это наследовалось и было доступно для конечного производного класса. Т.к. класс NSimpleDataTypes используется для группировки классов простых типов данных, а класс NDataTypes для всех типов данных. В общем, что я сделал не так?!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 04, 2011, 15:47 »

А слово public куда дел?
class NLogical :public  NSimpleDataTypes
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Eten
Гость
« Ответ #2 : Март 04, 2011, 15:51 »

А слово public куда дел?
class NLogical :public  NSimpleDataTypes
Спасибо все заработало.  Строит глазки
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #3 : Март 04, 2011, 18:47 »

Цитировать
Код
C++ (Qt)
void setName(QString Name) {if (Name != NULL) this->_name = Name; else this->_name = "";}
 
Интересная конструкция))
« Последнее редактирование: Март 04, 2011, 19:50 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Eten
Гость
« Ответ #4 : Март 05, 2011, 06:22 »

Цитировать
Код
C++ (Qt)
void setName(QString Name) {if (Name != NULL) this->_name = Name; else this->_name = "";}
 
Интересная конструкция))
А, это... Я тут прочитал на форуме про EMPTY и NULL у строки. Вот состояние NULL мне никак не нужно, уж лучше будет пустая.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.089 секунд. Запросов: 23.