Наличие члена одного и того же типа и имени в основе и производном не является неправильным, но у меня такое чувство, что вы не знаете о последствиях. Объект B
имеет два члена, называемых v
. Для иллюстрации рассмотрим этот пример:
#include <iostream>
struct A { int x = 3; };
struct B : A { int x = 5; };
int main() {
B b;
std::cout << b.x;
std::cout << b.A::x;
}
Результат: 53
Если вы хотите, чтобы B
инициализировал член v
с помощью {1,2,3}
, вы можете сделать две вещи : Предоставьте конструктор для A
, который инициализирует член, и вызовите этот конструктор в B
:
#include <iostream>
#include <vector>
class A {
public:
A() = default;
A(std::vector<int> v) : v(v) {}
std::vector<int> v = {3, 4, 5};
};
class B : public A {
public:
B() : A({1,2,3}) {}
};
int main() {
B b;
std::cout << b.v[0];
}
Вывод: 1
Чтобы ответить на ваш вопрос буквально:
Как использовать значение унаследованного члена класса при повышении уровня до базового класса
Обычно вы не должны напрямую обращаться к членам производного класса, когда у вас есть указатель на базовый класс. Это возможно через dynamic_cast
, но по возможности следует избегать применения забросов. Вместо этого базовый класс должен предоставлять необходимый интерфейс.