Russian Qt Forum

Программирование => С/C++ => Тема начата: Eten от Март 04, 2011, 15:39



Название: Проблема с доступом к публик функции от базового класса для производного.
Отправлено: 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 для всех типов данных. В общем, что я сделал не так?!


Название: Re: Проблема с доступом к публик функции от базового класса для производного.
Отправлено: Пантер от Март 04, 2011, 15:47
А слово public куда дел?
class NLogical :public  NSimpleDataTypes


Название: Re: Проблема с доступом к публик функции от базового класса для производного.
Отправлено: Eten от Март 04, 2011, 15:51
А слово public куда дел?
class NLogical :public  NSimpleDataTypes
Спасибо все заработало.  ::)


Название: Re: Проблема с доступом к публик функции от базового класса для производного.
Отправлено: m_ax от Март 04, 2011, 18:47
Цитировать
Код
C++ (Qt)
void setName(QString Name) {if (Name != NULL) this->_name = Name; else this->_name = "";}
 
Интересная конструкция))


Название: Re: Проблема с доступом к публик функции от базового класса для производного.
Отправлено: Eten от Март 05, 2011, 06:22
Цитировать
Код
C++ (Qt)
void setName(QString Name) {if (Name != NULL) this->_name = Name; else this->_name = "";}
 
Интересная конструкция))
А, это... Я тут прочитал на форуме про EMPTY и NULL у строки. Вот состояние NULL мне никак не нужно, уж лучше будет пустая.