#include<iostream> using namespace std; class B { public: B() { cout << "b" << endl; } virtual void Display(void) { cout << "B" << endl; } private: int m_nColor; }; class D1 : public B { public: D1() { cout << "d1" << endl; } void Display(void) { cout << "D1" << endl; } }; class D2 : public B { D2() { cout << "d2" << endl; } void Display(void) { cout << "D2" << endl; } }; class D3 :public B { public: D3() { cout << "d3" << endl; } void Display(void) { cout << "D3" << endl; } }; void main() { B b; D1 d1; D2 d2; D3 d3; B * bb[3] = { &d1,&d2, &d3 }; for (int i = 0; i < 3; i++) { bb[i]->Display(); } }
时间: 2024-04-26 08:20:37 浏览: 114
这段代码是一个简单的多态示例,定义了一个基类 B 和三个派生类 D1、D2、D3。其中基类 B 定义了一个虚函数 Display(),并且派生类 D1、D2、D3 分别实现了该虚函数。在 main() 函数中,分别创建了对象 b、d1、d2、d3,并且将 d1、d2、d3 的地址存储在一个 B 类型的指针数组 bb 中,然后通过循环调用 bb 中每个元素的 Display() 函数,实现了多态的效果。虽然 bb 中存储的是派生类的指针,但是通过基类的指针调用虚函数,会根据具体的对象类型调用相应的虚函数。因此,最终的输出结果是:
b
b
b
D1
D2
D3
其中,第一行输出的是创建对象 b 时输出的 "b"。接下来的三行输出的是通过 bb 指针数组调用基类 B 的虚函数 Display() 时输出的 "B"。最后的三行分别输出的是通过 bb 指针数组调用派生类 D1、D2、D3 的虚函数 Display() 时输出的 "D1"、"D2"、"D3"。
相关问题
请写出下面程序的运行结果。 #include<iostream> using namespace std; class B ( public: virtual void display( ) cout << "B: : display( ) "<<endl; ] " class C: public B public: void display(0){ cout<<"C: : display() "<<endl; ] . void fun(B*p) [ p >display(0); void main() (B b,*pb; C c; pb=&b; fun (pb) ; pb=&c; fun (pb)
程序存在一些语法错误,修正后的代码如下:
```
#include<iostream>
using namespace std;
class B {
public:
virtual void display() {
cout << "B: display()" << endl;
}
};
class C: public B {
public:
void display() {
cout << "C: display()" << endl;
}
};
void fun(B* p) {
p->display();
}
int main() {
B b;
C c;
B* pb;
pb = &b;
fun(pb);
pb = &c;
fun(pb);
return 0;
}
```
运行结果为:
```
B: display()
C: display()
```
第一个问题回答完毕,请继续提问。
#include<iostream> using namespace std; class B { public: virtual void display() { cout << "B: display()" << endl; } }; class C: public B { public: void display() { cout << "C: display()" << endl; } }; void fun(B* p) { p->display(); } int main() { B b; C c; B* pb; pb = &b; fun(pb); pb = &c; fun(pb); return 0; }
这段代码的运行结果是:
```
B: display()
: display()
```
在`main`函数中首先创建了一个`B`类的对象`b`和一个`C`类的对象`c。然后创建了一个指向`B`类的指针`pb`。
接下来将指针`pb`指向对象``,然后调用`fun函数,传入指针`pb`。由于`pb`指向的是`B`类的对象,所以调用的是`B`类的`display`函数,输出"B: display()"。
然后,将针`pb`指向对象`c`,再次调用`fun`函数,入指针`pb`。由于`pb`指向的是`C`类的对象,所以调用的是`C`类的`display`函数,输出"C: display()"。
因此,最终的运行结果是"B: display()"和"C: display()"。
阅读全文