доступ к элементу данных через композицию - PullRequest
0 голосов
/ 30 марта 2019

У меня есть структура obj в моем базовом классе.Я не знаю, как получить доступ к данным членов структуры через класс Derv1 (производный от базового класса).Я попытался сделать Base и Derv1 другом struct - он все еще говорит мне, что «член данных является приватным» (только приватным в Base).

пример:

struct A{
    public :
        int total;
        //some stuff
};
class MyClass{ // [Base] class
    private:
      A var1;
};

class Derv1{
    private:
        //some stuff
        public void display_var1(Derv1 x){
            return x.var1.total;
        }  // trying to return the value of A.total
};

Я надеюсь, что этоимеет смысл, чтобы вы могли помочь мне .. Спасибо, любезно,

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Во-первых, вы должны убедиться, что Derv происходит от MyClass.

class Derv1 : public MyClass { ... };

и затем вам нужно будет найти наилучший способ отображения переменной.

Мое предложение:

  1. Создание функции-члена virtual в базовом классе.
  2. Переопределить функцию в производном классе.
  3. Обязательно вызовите реализацию базового класса в реализациях производного класса.

class MyClass { // [Base] class

    public:

        virtual void display() const
        {
           // Display var1 anyway you wish to.
        }

    private:
      A var1;
};

class Derv1 : public MyClass {

    public:

        virtual void display() const
        {
           // Call the base class implementation first
           MyClass::display():

           // Display anything else that corresponds to this class
        }

    private:
        //some stuff
};
0 голосов
/ 30 марта 2019

я думаю, что вы должны расширить свой класс Derv1 до базового класса:

class Derv1: public MyClass{

для наследования членов базового класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...