在C++中,基類(base class)指針和引用可以用來指向或引用派生類(derived class)對象。這種轉(zhuǎn)換通常稱為“向上轉(zhuǎn)型”(upcasting),因為它將派生類對象的指針或引用轉(zhuǎn)換為基類指針或引用。向上轉(zhuǎn)型是安全的,因為基類指針或引用可以訪問派生類對象的基類部分。
以下是一個簡單的示例:
#include<iostream>
class Base {
public:
virtual void print() const {
std::cout << "Base"<< std::endl;
}
};
class Derived : public Base {
public:
void print() const override {
std::cout << "Derived"<< std::endl;
}
};
int main() {
Derived derived;
Base* basePtr = &derived; // 基類指針指向派生類對象
Base& baseRef = derived; // 基類引用引用派生類對象
basePtr->print(); // 輸出 "Derived"
baseRef.print(); // 輸出 "Derived"
return 0;
}
在這個示例中,我們有一個基類Base
和一個派生類Derived
。我們創(chuàng)建了一個Derived
對象,并將其地址賦給基類指針basePtr
,同時將其引用賦給基類引用baseRef
。當(dāng)我們調(diào)用basePtr->print()
和baseRef.print()
時,實際上調(diào)用的是派生類的print()
方法,因為它被標(biāo)記為override
,并且基類的print()
方法是虛函數(shù)。
需要注意的是,如果基類中的成員函數(shù)不是虛函數(shù),那么基類指針或引用調(diào)用該成員函數(shù)時將不會調(diào)用派生類的重寫版本。在這種情況下,你需要將基類成員函數(shù)聲明為虛函數(shù),以便在運行時正確地調(diào)用派生類的版本。