Как изменить переменные базового класса с помощью объекта производного класса-c

#c

#c

Вопрос:

 #include "stdafx.h"
#include <iostream>
using namespace std;

class A
{
public:
  int a,b,c;
  A()
  {
      a=0;
      b=0;
      c=0;
  }
};

class B:public A
{
public:
    void get()
    {
        A *a2 =new A;
        a2->a=10;
        a2->b=20;
        a2->c=30;
        cout<<a2->a<<""<<a2->b<<""<<a2->c<<""<<endl;
        cout<<"Checking!"<<endl;
    }
};

int main()
{
    A *a1 = new A;
    B *b1 = new B;
    cout<<a1->a<<""<<a1->b<<""<<a1->c<<""<<endl;
    b1->a=10;
    b1->b=20;
    b1->c=30;
    cout<<b1->a<<""<<b1->b<<""<<b1->c<<""<<endl;

    b1->get();//cant able to change the variables of the base class object with the derived class object
    cout<<a1->a<<""<<a1->b<<""<<a1->c<<""<<endl;//will print the same values..

    //b1->get();

    return 0;
}
  

вывод:

000
102030
102030
Проверка!
000
Нажмите любую клавишу, чтобы продолжить . . .

//Адрес переменных, которые хранятся в объекте производного класса, отличается от адреса переменных, которые хранятся в объекте базового класса.Isnt.. // Но есть ли какая-либо возможность изменить переменные базового класса с помощью объекта производного класса..

Комментарии:

1. Пожалуйста, научитесь форматировать свой код для отображения здесь. Выберите его в редакторе, а затем нажмите кнопку с фигурными скобками над ним.

2. @unaperson: Спасибо. Я сделаю это, начиная со следующего вопроса.

Ответ №1:

Почему вы создаете новый A внутри функции get, просто:

 cout << a << b << c << "n";
  

или, если вы хотите быть более явным:

 cout << this->a << this->b << this->c << "n";
  

Комментарии:

1. если вы застряли на использовании указателя, вы могли бы заменить его a2=new A на a2 = this . this является указателем на «текущий объект»

Ответ №2:

В вашем get() методе вы фактически создаете временный экземпляр Base class A , который не имеет ничего общего с производным классом. Просто удалите a2 отовсюду в вашем get() и попробуйте. Вы сможете увидеть происходящие изменения.

[Примечание: Объект базового класса автоматически выделяется при выделении производного объекта. Это означает, что когда вы это сделаете new B , он выделит память для B и A ]

Редактировать:

Что касается вашего вопроса, ваш get() должен быть таким:

 void get()
{
    a=10;
    b=20;
    c=30;
    cout<<a<<b<<c<<endl;
    cout<<"Checking!"<<endl;
}
  

Комментарии:

1. Если я изменяю переменную с помощью объекта производного класса и если я получаю к ней доступ с помощью объекта базового класса, переменная должна выдавать измененное значение (выполняется производным классом). Я удалил объект a2 . но все равно значение не изменилось на 102030. вместо этого он выводит мне 000.