Вызов функции из базового класса, который использует функции-члены производного класса

Я создал класс и производный класс, которые почти полностью совпадают. Единственное отличие состоит в том, что производный класс имеет 2 разные функции и 3 дополнительные переменные. Я хочу, чтобы вызываемая функция из класса B использовала унаследованную функцию, но с PrivFunctions класса B. Вместо этого при вызове функция использует PrivFunctions своего собственного класса, класса A.

class A
{
protected:
double x,y,z;
Function() {
*do something using the member variables of class A and the member functions of class A* }

private:
double PrivFunction() {
*take in member variables from A and return a certain value* }

double PrivFunction2() {
*take in member variables from A and return a certain value* }

class B : public A
{
private:
double a,b,c;

double PrivFunction() {
*take in member variables from A,B and return a certain value* }

double PrivFunction2() {
*take in member variables from A,B and return a certain value* }

main() {
B classb();
B.Function() 
}

Я думал о добавлении адресов приватных функций в Function(), но это кажется слишком надуманным. Я чувствую, что упускаю что-то простое, но я просто не могу понять, как это сделать аккуратно


person Viktor    schedule 14.05.2017    source источник
comment
Я думаю, вы ищете virtualфункции-члены.   -  person Igor Tandetnik    schedule 14.05.2017


Ответы (1)


Что вам нужно сделать, так это объявить функцию в базовом классе как virtual. Это тип функции, которую вы определяете в базовом классе A, а затем необходимо переопределить в подклассах. Объявление функций как virtual гарантирует, что вызываются правильные функции, и позволяет избежать двусмысленности.

Ваш код должен выглядеть примерно так:

class A
{
     protected:
     double x, y, z;
     //define as virtual
     virtual Function(){/*do something*/}

     /*
     rest of your code
     */
}
class B: public A
{
    private:
    double a, b, c

    public:
    //redefine your function in the subclass
    Function(){/*do something else*/}
    /*
    rest of your code
    */
}
int main()
{
    B classb();
    //This will now use B's Function
    classb.Function();
}
person alejandrogiron    schedule 14.05.2017