基类与派生类对象之间具有赋值兼容的关系,可以进行类型间的转换,派生类对象可以直接转换为基类对象,同样基类对象也可以直接转换为派生类对象 。这是什么意思。举个代码
时间: 2024-03-24 11:39:36 浏览: 104
好的,让我来给您举个代码的例子。假设我们有一个基类Animal(动物),它有一个派生类Cat(猫)。我们可以定义如下的类:
```c++
#include <iostream>
using namespace std;
class Animal {
public:
virtual void say() {
cout << "I am an animal." << endl;
}
};
class Cat : public Animal {
public:
void say() {
cout << "I am a cat." << endl;
}
};
```
在上面的代码中,基类Animal里面有一个虚函数say(),派生类Cat继承了Animal,并覆盖了say()函数。
现在我们可以创建一个Animal对象和一个Cat对象,然后将Cat对象转换为Animal对象,也可以将Animal对象转换为Cat对象。代码如下:
```c++
int main()
{
Animal a;
Cat c;
// 将Cat对象转换为Animal对象
Animal& r1 = c;
Animal* p1 = &c;
// 将Animal对象转换为Cat对象
Cat& r2 = dynamic_cast<Cat&>(a);
Cat* p2 = dynamic_cast<Cat*>(&a);
r1.say(); // 输出:I am a cat.
p1->say(); // 输出:I am a cat.
r2.say(); // 抛出异常:bad_cast
p2->say(); // 输出:I am a cat.
return 0;
}
```
在上面的代码中,我们将Cat对象转换为Animal对象的方式有两种:一种是使用引用,将Cat对象转换为Animal对象的引用;另一种是使用指针,将Cat对象转换为Animal对象的指针。同样地,我们也将Animal对象转换为Cat对象的方式有两种:一种是使用引用,将Animal对象转换为Cat对象的引用;另一种是使用指针,将Animal对象转换为Cat对象的指针。
需要注意的是,我们使用dynamic_cast进行对象类型转换时,如果转换不成功,会抛出std::bad_cast异常。在上面的代码中,我们将Animal对象转换为Cat对象时,因为Animal对象并不是一个Cat对象,转换不成功,程序会抛出异常。
阅读全文