[英]pure virtual function, how it works
我有一個關於純虛函數的問題。 我不清楚它是如何工作的以及何時需要使用純虛函數。 這是我不理解的示例:
file.h
class A
{
public :
A();
~A();
virtual void func1(void) = 0;
virtual UINT32 func2(void) = 0;
UINT32 initialize(void) = 0;
}
file.cpp
UINT32 A:initialize (void)
{
func1();
func2();
return (result);
}
誰能詳細解釋該示例的實際作用和結果? 非常感謝您的幫助和知識。 非常感謝你。
(請注意, initialize()
的聲明不應為虛擬的,並且initialize()
的實現可能應返回func2()
。由於這是一個示例, initialize()
並不重要,但應進行編譯正確地。)
虛函數的主要目的是實現多態。
類A
定義了兩個純虛方法,並initialize
調用它們。 這允許程序中的代碼在不知道子類的情況下初始化A
類型A
。 A
可能有許多子類,並且每個子類在func1()
和func2()
所做的事情可能略有不同。 由於有時僅了解A
的代碼有時會通過A
初始化不同類型的對象,因此A
可以稱為多態類型。
class B : public A {
void func1 () { std::cout << "B::func1" << std::endl; }
UINT32 func2 () { return 1; }
};
class C : public A {
void func1 () { std::cout << "C::func1" << std::endl; }
UINT32 func2 () { return 2; }
};
void call_initialize (A *a) {
std::cout << a->initialize() << std::endl;
}
B b;
C c;
call_initialize(&b);
call_initialize(&c);
輸出結果:
B::func1
1
C::func1
2
這是一個多態行為的示例,因為根據A
是B
還是C
子類化,輸出是不同的。
函數func1
和func2
未在A中實現(根據所示代碼)。
如果實現了它們,則將它們調用。 如果存在A的派生類,並且派生類的對象是多態創建的,即
class B : public A
{
.....
};
A* obj = new B();
obj->initialize();
然后,如果B實現了它們,則調用B版本的func1()和func2()。
如Ethan的評論中所述,您不是從func2()中獲取結果。
所以你需要寫
UINT32 result = func2();
要么
return func2();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.