溫馨提示×

c++ base類指針與引用的轉(zhuǎn)換

c++
小樊
82
2024-09-04 18:40:05
欄目: 編程語言

在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)用派生類的版本。

0