[英]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.