2016-04-29 109 views
-4

我有一個基類A和兩個類B,C派生自A.我們可以在類A中給出方法func的聲明。如何分別爲B和C定義方法func ?定義派生類中基類的未定義方法

class A { 
public: 
    void func(); 
}; 

class B : public A { 
//some members 
}; 

class C : public A { 
//some members 
}; 

//define B's func here without changing the definition of the three classes 
//define C's func here without changing the definition of the three classes 
+2

這是一個基本的_very_主題中C++和覆蓋在C++的書。我建議你拿起一本關於C++的好書(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 –

+0

不使用「虛擬」指令是不可能的。 A :: func()的地址必須被B :: func()或C :: func()覆蓋,並且只能在後期綁定時才能完成。 – Vink

回答

2

你必須讓你想覆蓋「虛擬」或「純虛」的方法,如果一個類有虛擬方法,還析構函數必須是虛:

class A { 
public: 
    virtual ~A{}; 
    virtual void func() = 0; 
}; 

class B : public A { 
    void func() {}; 
}; 

class C : public A { 
    void func() {}; 
}; 
+0

....「不改變三個類別的定義」 – newuser

+1

@newuser:沒有改變,這是不可能的。 – cwschmidt

2

不,你不能在類中聲明不實現成員函數。

class A { 
public: 
    void func(); 
}; 

class B : public A { 
//some members 
}; 

class C : public A { 
//some members 
}; 

void B::func() {} 
void C::func() {} 
/tmp/164435074/main.cpp:17:9: error: out-of-line definition of 'func' does not match any declaration in 'B' 
void B::func() {} 
     ^~~~ 
/tmp/164435074/main.cpp:18:9: error: out-of-line definition of 'func' does not match any declaration in 'C' 
void C::func() {} 
     ^~~~