shape为抽象基类,circle,triangle,square为子类,main函数中测试多态效果,成员函数draw()
时间: 2023-05-28 22:08:12 浏览: 103
作用是输出不同形状的图形。
```python
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def draw(self):
pass
class Circle(Shape):
def draw(self):
print("Drawing a circle")
class Triangle(Shape):
def draw(self):
print("Drawing a triangle")
class Square(Shape):
def draw(self):
print("Drawing a square")
def main():
shapes = [Circle(), Triangle(), Square()]
for shape in shapes:
shape.draw()
if __name__ == '__main__':
main()
```
输出结果:
```
Drawing a circle
Drawing a triangle
Drawing a square
```
相关问题
shape为抽象基类,circle,triangle,square为子类
。Shape是一个抽象基类,它定义了所有形状共有的属性和方法,但它本身不能被实例化。
Circle是Shape的子类,它继承了Shape的属性和方法,并在此基础上添加了圆形特有的属性和方法,比如半径、面积和周长的计算等。
Triangle也是Shape的子类,它继承了Shape的属性和方法,并在此基础上添加了三角形特有的属性和方法,比如三边长、面积和周长的计算等。
Square同样是Shape的子类,它继承了Shape的属性和方法,并在此基础上添加了正方形特有的属性和方法,比如边长、面积和周长的计算等。
这样设计的好处是,在使用这些形状对象时,可以通过它们的共同属性和方法来实现通用的操作,比如计算面积、周长、判断是否相交等,同时也可以通过特定的方法来实现各自的特殊功能,比如计算圆的直径、三角形的高度、正方形的对角线长度等。
如何在main函数中测试多态效果
要测试多态效果,需要创建多个继承自同一个基类的子类对象,并将它们赋值给同一个基类指针或引用,然后调用基类的虚函数。
以下是一个示例代码:
```c++
#include <iostream>
using namespace std;
class Animal {
public:
virtual void speak() {
cout << "Animal speaks." << endl;
}
};
class Cat : public Animal {
public:
void speak() {
cout << "Meow." << endl;
}
};
class Dog : public Animal {
public:
void speak() {
cout << "Woof." << endl;
}
};
int main() {
Animal* ptr = new Animal();
ptr->speak();
ptr = new Cat();
ptr->speak();
ptr = new Dog();
ptr->speak();
return 0;
}
```
在这个示例代码中,Animal是基类,Cat和Dog是继承自Animal的子类。在main函数中,我们创建了一个Animal类型的指针ptr,并依次将它赋值为Animal、Cat和Dog的对象指针,并调用了它们的speak()函数。
由于speak()是虚函数,它会根据指针所指向的对象类型来调用对应的函数。因此,当ptr指向Animal对象时,输出的是"Animal speaks.",当ptr指向Cat对象时,输出的是"Meow.",当ptr指向Dog对象时,输出的是"Woof.",这就展示了多态的效果。
阅读全文