[英]Overriding in C++
class base {
public:
int foo();
int foo(int a);
int foo(char* b);
int doSomething(int);
}
class derived : public base
{
public:
int doSomething(int b);
}
int derived::doSomething( int b)
{
base::doSomething(b);
//Make Something else
}
int main()
{
derived d= new derived();
d->foo();
}
現在在foo方法(其中的任何一個)中,我想調用更具體的doSomething。 如果我實例化了派生類,我想要派生類的doSomething,並且如果我實例化了基類,我想要基類的doSomething,盡管我是從基類中實現的foo方法調用的。
int base::foo()
{
//do something
makeSomething(5);
}
在基類中,將doSomething方法設為虛擬:
public:
virtual int doSomething(int);
那么你也能:
Base* deriv = new Derived();
Base* base = new Base();
deriv->doSomething();
base->doSomething();
享受!
我將提出此示例,以說明使用虛擬或不使用之間的區別
struct A {
virtual ~A() {}
virtual void f() {}
void g() {}
};
struct B : A {
void f() {}
void g() {}
};
A* a = new A;
A* b = new B;
a->f(); // calls A::f
b->f(); // calls B::f
b->g(); // calls A::g
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.