Рассмотрим пример кода ниже:Наследственные функция член обращающиеся элементы данных
#include <iostream>
using namespace std;
class A
{
private:
static int a;
int b;
protected:
public:
A() : b(0) {}
void modify()
{
a++;
b++;
}
void display()
{
cout << a <<"\n";
cout << b <<"\n";
}
};
int A::a=0;
class B : public A {
private:
int b;
public:
B(): b(5)
{
}
};
int main()
{
A ob1;
B ob2;
ob1.display();
ob2.display();
return 0;
}
В приведенном выше коде, class A
имеет частный элемент данных b
и class B
также имеет частный элемент b
данных. Для отображения элементов данных используется функция display()
. Когда я вызываю display() с помощью ob1.display()
, display() обращается к частному элементу данных b
класса A. Я это понимаю. Но когда я вызываю отображение с помощью ob2.display
, которое показывает b
()? Это b
класса A или b
класса B? Пожалуйста, объясните, почему он обращается к class A's b
или class B's b
С благодарностью: Так что же использовать 'class B', наследующий' class A's' 'display()' функцию. 'class B' унаследовал функцию' display() 'от' класса A', и поэтому я ожидал 'display()' для доступа к классу B ' –
@LinuxPenseur. Существует много применений. Это просто не один из них. Чтобы достичь того, чего вы хотите, вы можете либо не вводить новую переменную, а инициализировать базовый класс 'b' через вызов базового конструктора или вводить« виртуальный »метод в базовом классе, который возвращает значение' b' в базовом классе и переопределить его, чтобы вернуть значение 'b' в производном классе. –
Или просто иметь метод в производном классе, который обращается к членам производного класса и далее инициирует вызов путем вызова метода базового класса, который обращается к членам базового класса. –