基类和派生类的转化
时间: 2023-11-27 08:54:47 浏览: 81
C++派生类与基类的转换规则
5星 · 资源好评率100%
在面向对象编程中,基类和派生类之间可以进行转化。
1. 向上转型:将派生类对象转化为基类对象,可以通过将派生类对象的指针或引用赋值给基类指针或引用实现。
例如:
```c++
class Base {
public:
void func1() {
cout << "Base::func1()" << endl;
}
};
class Derived : public Base {
public:
void func2() {
cout << "Derived::func2()" << endl;
}
};
int main() {
Derived d;
Base* b = &d; // 向上转型
b->func1(); // 调用基类函数
return 0;
}
```
输出结果为:
```
Base::func1()
```
2. 向下转型:将基类对象转化为派生类对象。在使用基类指针或引用访问派生类成员时需要进行向下转型。可以使用 dynamic_cast 运算符进行向下转型。
例如:
```c++
class Base {
public:
virtual void func1() {
cout << "Base::func1()" << endl;
}
};
class Derived : public Base {
public:
void func2() {
cout << "Derived::func2()" << endl;
}
};
int main() {
Base* b = new Derived();
Derived* d = dynamic_cast<Derived*>(b); // 向下转型
if (d != nullptr) {
d->func2(); // 调用派生类函数
}
delete b;
return 0;
}
```
输出结果为:
```
Derived::func2()
```
需要注意的是,向下转型时需要确保基类指针或引用指向的对象实际上是派生类对象,否则可能会导致未定义行为。
阅读全文