簡體   English   中英

將基類的函數與繼承的類值一起使用

[英]Use a base class' function with inherited classes values

有什么方法可以從子類中調用父函數,但是在函數內使用子數據代替父數據。

#include <stdio.h>

class Base{

public:
    int i=10;

    virtual void print(){
        printf("%i", i );
    }

};


class Derived : public Base {

public:
    int i = 20;

    void print(){
        Base::print();
    }

};

int main (){

    Derived I;
    I.print();    

}

因此,我希望這基本上打印20個而不是10個。

編輯:::::::::::::

我實際上想做的是使用定義多個功能的基類

    virtual int OnExecute();

    virtual bool OnInit();

    virtual void OnEvent(SDL_Event* Event);

    virtual void OnLoop();

    virtual void OnRender();

    virtual void OnCleanUp();

然后讓派生類重載所有類似OnExectue()的函數,如下所示

 if (OnInit() == 0 ){
    return -1;
    }

    SDL_Event Event;
    while (isRunning){
            while (SDL_PollEvent(&Event)){
                    OnEvent(&Event);
            }
            OnLoop();
            OnRender();
    }

OnCleanUp();

因此,有沒有一種更簡單的方法,我不必定義5個額外的函數來傳遞函數指針。

如果您通過虛擬成員函數提供對數據的訪問,則可以執行此操作。

#include <stdio.h>

class Base{

public:
    int i=10;

    virtual void print(){
        printf("%i", this->getI() );
    }

    virtual int getI()
    {
       return i;
    }

};


class Derived : public Base {

public:
    int i = 20;

    void print(){
        Base::print();
    }

    virtual int getI()
    {
       return i;
    }
};

int main (){

    Derived I;
    I.print();    

}

您需要一個dynamic_cast,像這樣:

#include <iostream>
#include <stdio.h>

class Derived;

class Base{
    public:
    int i=10;

    virtual void print();
};

class Derived : public Base {
public:
    int i = 20;
    void print(){
        Base::print();
    }

};

void Base::print(){
    Derived* p = dynamic_cast<Derived*>(this);                                                                                                                               
    if(p) {
        //derived
        printf("%i\n", p->i);
    }else{
        //base
        printf("%i\n", i);
    }
}

int main (){

    Derived I;
    I.print();    

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM