#include<iostream.h>class Base{int b;public:Base(int i):b(i){}void virtual who(){ cout<<"Base Class"<<endl; }void print(){ cout<<"Member of Base is"<<b<<endl; }};class D1:publie Base{ int d; public:D1(int i,int j):Base(i),d(j){ }void who(){ cout<<"D1 Class"<<endl; }void print(){cout<<"Member of D1 is"<<d<<endl; }class D2:public Base{ int d;public:D2(int i,int j):Base(i),d(j){ }void who() { cout<<"D2 Class"<<endl; }void print() { cout<<"Member of D2 is"<<d<<endl; }};void main(){ Base b1(1),*p;D1 obj2(2,3); D2 obj3(4,5);p=&b1; p->who();p=&obj2; p->who();p->print(); p=&obj3;p->who(); p->print();obj3.print();}此程序结果为
时间: 2024-03-09 07:48:50 浏览: 63
这段程序有以下问题:
1. 头文件应该是 #include <iostream> 而不是 #include <iostream.h>,因为 iostream 是标准库的一部分。
2. 类 D1 和类 D2 的定义不正确,应该将类 D1 和类 D2 的定义与类 Base 的定义分开,而不是嵌套在类 Base 的定义中。
3. 类 D1 和类 D2 中的成员函数 who 和 print 应该也是虚函数,以便进行多态性调用。
4. 在 main 函数中,应该在程序开始时加上命名空间 std,即使用 namespace std;。
5. 在 main 函数中,应该在输出语句中使用 std::endl 而不是 endl。
综上所述,以下是修改后的程序:
```
#include <iostream>
using namespace std;
class Base {
int b;
public:
Base(int i): b(i) {}
virtual void who() { cout << "Base Class" << endl; }
void print() { cout << "Member of Base is " << b << endl; }
};
class D1: public Base {
int d;
public:
D1(int i, int j): Base(i), d(j) {}
virtual void who() { cout << "D1 Class" << endl; }
virtual void print() { cout << "Member of D1 is " << d << endl; }
};
class D2: public Base {
int d;
public:
D2(int i, int j): Base(i), d(j) {}
virtual void who() { cout << "D2 Class" << endl; }
virtual void print() { cout << "Member of D2 is " << d << endl; }
};
int main() {
Base b1(1), *p;
D1 obj2(2, 3);
D2 obj3(4, 5);
p = &b1;
p->who();
p = &obj2;
p->who();
p->print();
p = &obj3;
p->who();
p->print();
obj3.print();
return 0;
}
```
阅读全文