簡體   English   中英

用C ++重寫

[英]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() {}
};

struct B : A {
    void f() {}
};

// ...
A* a = new A;
A* b = new B;
a->f(); // calls A::f
b->f(); // calls B::f

C ++常見問題解答lite 涵蓋了一些細節 ,但不能替代一本好的入門書籍

我將提出此示例,以說明使用虛擬或不使用之間的區別

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.

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