在C++中,基类(base class)指针和引用可以用来指向或引用派生类(derived class)对象。这种转换通常称为“向上转型”(upcasting),因为它将派生类对象的指针或引用转换为基类指针或引用。向上转型是安全的,因为基类指针或引用可以访问派生类对象的基类部分。
以下是一个简单的示例:
#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
。我们创建了一个Derived
对象,并将其地址赋给基类指针basePtr
,同时将其引用赋给基类引用baseRef
。当我们调用basePtr->print()
和baseRef.print()
时,实际上调用的是派生类的print()
方法,因为它被标记为override
,并且基类的print()
方法是虚函数。
需要注意的是,如果基类中的成员函数不是虚函数,那么基类指针或引用调用该成员函数时将不会调用派生类的重写版本。在这种情况下,你需要将基类成员函数声明为虚函数,以便在运行时正确地调用派生类的版本。