如果函数的参数是基类对象或基类对象的引用,函数调用时的实参可以是派生类对象。举个代码解释一下
时间: 2024-03-24 12:39:46 浏览: 150
当函数的参数是基类对象或基类对象的引用时,可以传入派生类对象作为参数,这是因为派生类继承了基类的所有成员,包括成员函数和成员变量,因此可以被当做基类对象来使用。以下是一个简单的C++代码示例:
```cpp
#include <iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape( int a = 0, int b = 0) {
width = a;
height = b;
}
virtual int area() {
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape {
public:
Rectangle( int a = 0, int b = 0):Shape(a, b) { }
int area () {
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
int main( ) {
Shape *shape;
Rectangle rec(10,7);
shape = &rec;
// 调用 Rectangle 的 area 函数
shape->area();
return 0;
}
```
在上面的代码中,首先定义了一个基类 `Shape`,其中包含了一个 `area()` 函数,然后定义了一个派生类 `Rectangle`,重写了 `area()` 函数,并且在其中输出了一个字符串 "Rectangle class area :",最后在 `main()` 函数中,定义了一个 `Shape` 指针 `shape` 和一个 `Rectangle` 对象 `rec`,并且将 `rec` 的地址赋给了 `shape`,然后通过调用 `shape->area()` 函数来调用 `Rectangle` 类的 `area()` 函数。因为 `shape` 指向的是一个 `Rectangle` 对象,所以最终输出的结果是 "Rectangle class area :"。
可以看到,尽管 `shape` 的类型是 `Shape`,但是它可以指向一个派生类对象,并且可以调用派生类的成员函数。这也说明了可以将派生类对象当做基类对象来使用,这就是多态性的体现。
阅读全文