有沒有一種方法可以在派生類的基類中調用成員函數?C++派生函數與基函數的比較
Class Bass{
public:
void func();
};
Class Derived: public Base{
public:
void func();
};
我有一個練習期中,我懷疑沒有,因爲基類如何知道派生,但我不知道。
有沒有一種方法可以在派生類的基類中調用成員函數?C++派生函數與基函數的比較
Class Bass{
public:
void func();
};
Class Derived: public Base{
public:
void func();
};
我有一個練習期中,我懷疑沒有,因爲基類如何知道派生,但我不知道。
有沒有什麼建議可以在從它派生的類中調用基類的成員函數的方法嗎?
不知道你的意思到底是什麼,但鑑於你Base
和Derived
類,你可以做到以下幾點。由於slicing problem,請確保您使用引用或指針,而不是傳值。
呼叫Base::func()
從Derived::func()
內:
void Derived::func()
{
Base::func();
}
呼叫Base::func()
明確一個Derived
對象:
Derived d;
d.Base::func();
我[...]我想知道如果正如其他人所指出的,你可以不喜歡
Base::func(Derived d)
,您可以在此使用前向聲明做:
// Tell the compiler "Derived" is a class name.
class Derived;
class Base
{
// Can use the class name since it has been declared.
void func(Derived& derived);
};
// Define the class named "Derived".
class Derived : public Base
{
// ...
};
// Use the derived class.
void Base::func(Derived& derived)
{
// For this bit to work, the definition of `Derived` must
// be visible at this point (like putting the class above
// or including your "Derived.h" from "Base.cpp").
derived.some_derived_method();
}
但是,您將無法定義Base::func(Derived&)
直接在類定義中,因爲您需要完成定義Base
並首先定義Derived
。
你應該能夠做這樣的事情:
class Derived;
class Base {
public:
void func();
void func(Derived);
};
class Derived : public Base {
public:
void func();
};
void
Base::func(Derived D) {
}
這是好於基本的成員函數聲明使用不完全類型,但是你必須提供自己的定義之前,完整的類型。
如果我理解正確,你需要調用派生參數的基函數? 只能使用前向聲明並通過指針或ref傳遞派生對象。
class Derived;
class Base{
public:
void func(Derived&);
};
這解決的問題非常好,所以爲什麼downvote –
首先,你是指一個對象或靜態類方法的方法嗎?
其次,答案是:它取決於你調用方法調用的對象是什麼。這是多態性的本質:如果你的對象是'Derived'類型的,那麼即使它已經被轉換爲'Base',方法調用仍然會調用Derived版本的func。
那是你在問什麼?
其實,這只是適用於虛函數的真正 – bdow
您可以使用前置聲明派生類:
class Derived;
你說的是虛函數?這就是他們的工作方式。您可以在基類中定義一個虛函數,在dervied類中實現它,並且可以從基類中調用它。這通常用作[TemplateMethod](http://en.wikipedia.org/wiki/Template_method_pattern),以允許所述基類定義的一個過程步驟的順序但派生類定義這些步驟是如何實現的。 –