将派生类对象的指针或引用转换为基类对象的指针或引用
时间: 2024-01-24 13:17:30 浏览: 25
将派生类对象的指针或引用转换为基类对象的指针或引用的过程称为向上转型(upcasting)。这种转换是安全的,因为派生类对象包含了基类对象的所有成员和实现,所以可以将派生类对象看作是基类对象。
下面是一个示例代码,演示如何将派生类对象的指针或引用转换为基类对象的指针或引用:
```c++
class Base {
public:
void foo() {
std::cout << "Base::foo()" << std::endl;
}
};
class Derived : public Base {
public:
void bar() {
std::cout << "Derived::bar()" << std::endl;
}
};
int main() {
Derived d;
Base* ptr1 = &d; // 派生类对象的指针转换为基类对象的指针
Base& ref1 = d; // 派生类对象的引用转换为基类对象的引用
ptr1->foo(); // 调用基类成员函数
// ptr1->bar(); // 错误:基类指针无法调用派生类成员函数
ref1.foo(); // 调用基类成员函数
// ref1.bar(); // 错误:基类引用无法调用派生类成员函数
return 0;
}
```
在上面的示例中,我们定义了一个基类 `Base` 和一个派生类 `Derived`,并且让派生类继承了基类。我们创建了一个派生类对象 `d`,然后将它的指针和引用转换为基类对象的指针和引用。这样就可以通过基类指针或引用来调用基类成员函数了。注意,由于基类指针或引用只能访问基类的成员,所以无法调用派生类的成员函数。