#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.