#include <iostream > using namespace std; class A { public: A() { cout << "A" << endl; } A(double x, double y) { cout << "K" << endl; } ~A() { cout << "~A" << endl; } void SetData(double i) { y = i; x = i*2; cout << "S" << endl; } virtual void Do() = 0; double x, y;}; class B :public A { public: B() { cout << "B" << endl; } ~B() { cout << "~B" << endl; } void Do() { cout << "x+y=" << x+y << endl;} }; int main() { A *pA; B b; pA = &b; pA->SetData(1); pA->Do(); cout << "T" << endl; return 0; }上述代码的功能和具体流程是怎样的
时间: 2023-10-30 18:30:10 浏览: 76
使用include <iostream>时一定要加using namespace std
这段代码定义了两个类 A 和 B,其中 A 是一个抽象类,里面包含了构造函数、析构函数、成员变量 x 和 y,以及一个纯虚函数 Do()。B 是 A 的派生类,实现了 A 中的纯虚函数 Do()。
在 main 函数中,首先定义了一个指向 A 类对象的指针 pA,然后创建了一个 B 类对象 b。接着将 b 的地址赋值给指针 pA。这里需要注意的是,由于 B 是 A 的派生类,因此可以将 B 的地址赋值给指向 A 的指针。这就是多态的体现。
接下来调用了 pA 指向的对象的成员函数 SetData(1),该函数将参数 1 赋值给 y,然后计算 x = 2y。最后输出了字母 S,表示函数执行成功。
然后调用了 pA 指向的对象的成员函数 Do(),该函数输出了 x+y 的值。由于 B 类已经实现了 Do() 函数,因此调用的是 B 类中的函数,输出了 x+y 的值。
最后输出了字母 T,表示程序执行结束。在程序结束时,会自动调用对象的析构函数进行清理工作。由于 pA 指向的是 B 类对象,因此会先调用 B 类的析构函数,再调用 A 类的析构函数。输出的结果是:
```
A
B
S
x+y=4
T
~B
~A
```
阅读全文