В этом посте приведен простой пример на языке с++, который помогает помять, что такое наследование. Здесь определены два класса - A и B, которые находятся в отношении наследования: класс B является дочерним по отношению к классу A.
Поле данных в базовом (иначе говоря, родительском) классе только одно - это переменная целого типа a. В классе B вроде бы присутствует только одно поле данных - int b. Однако как раз суть наследования именно в том и заключается, что все члены базового класса являются также и членами дочернего класса. То есть int a является также и членом класса B. Членами класса B являются два одноименных метода Print(). Если метод Print() вызывается для объекта класса B, то по умолчанию подразумевается, что вызывается "родной" для класса B Print().
В противном случае используется оператор разрешения области видимости "::"
using namespace std;
class A
{
protected:
int a;
public:
A(int x){ a = x; } // конструктор
void Print() { cout << a << endl;}; // функция - член класса (выводит a)
class B: public A
{
int b;
public:
B() : A(15) // так как a является членом класса B, то необходимо
{ // проинициализировать a путем вызова
b = 20; // конструктора класса A с параметром типа int
}
B(int y) : A(15)
{
b = y;
}
B(int x, int y) : A(x), b(y) // с помощью этого конструктора можно { // проинициализировать a и b через параметры
}
void Print()
{
A::Print(); // вызов функции Print() из класса A
std::cout << b << endl;
}
};
void main()
{
B obj(40, 50);
obj.Print(); // вызов функции Print() из класса B
obj.A::Print(); // вызов функции Print() из класса A
}
Рисование мышью в консоли
Поле данных в базовом (иначе говоря, родительском) классе только одно - это переменная целого типа a. В классе B вроде бы присутствует только одно поле данных - int b. Однако как раз суть наследования именно в том и заключается, что все члены базового класса являются также и членами дочернего класса. То есть int a является также и членом класса B. Членами класса B являются два одноименных метода Print(). Если метод Print() вызывается для объекта класса B, то по умолчанию подразумевается, что вызывается "родной" для класса B Print().
В противном случае используется оператор разрешения области видимости "::"
using namespace std;
class A
{
protected:
int a;
public:
A(int x){ a = x; } // конструктор
void Print() { cout << a << endl;
class B: public A
{
int b;
public:
B() : A(15) // так как a является членом класса B, то необходимо
{ //
}
B(int y) : A(15)
{
b = y;
}
B(int x, int y) : A(x), b(y) // с помощью этого конструктора можно
void Print()
A::Print(); // вызов функции Print() из класса A
std::cout << b << endl;
}
};
void main()
{
B obj(40, 50);
obj.Print(); // вызов функции Print() из класса B
obj.A::Print(); // вызов функции Print() из класса A
}
Комментариев нет:
Отправить комментарий