#include <iostream> using namespace std; class A { public: A(int aa){a=aa;} void show()const{cout<<"A:"<<a<<endl;} int a; }; class B: public A { public: B(int aa,int bb):A(aa),b(bb){ } B(A &ra); //写出该转换构造函数的类外定义 void show()const; private: int b; }; void B::show()const { A::show(); cout<<"B:"<<b<<endl; } void f(const B &rb) { rb.show(); } int main() { A obj(5); f(obj); return 0; }
时间: 2024-03-16 16:47:17 浏览: 18
该程序存在问题,因为在调用 f 函数时,传入的是 A 类型的对象 obj,而 f 函数的参数类型是 const B&,这是不兼容的,编译器会报错。
修改方法如下:
1. 将 f 函数的参数类型改为 const A&,这样就可以接受 A 类型的对象。
2. 在 B 类中添加一个 A 类型的引用作为参数的转换构造函数,将 A 类型的对象转换为 B 类型的对象。
修改后的程序如下:
```c++
#include <iostream>
using namespace std;
class A {
public:
A(int aa){a=aa;}
void show()const{cout<<"A:"<<a<<endl;}
int a;
};
class B: public A {
public:
B(int aa,int bb):A(aa),b(bb){ }
B(A &ra):A(ra),b(0){ } //转换构造函数
void show()const;
private:
int b;
};
void B::show()const {
A::show();
cout<<"B:"<<b<<endl;
}
void f(const A &ra) {
B b(ra); //将 A 类型的对象转换为 B 类型的对象
b.show();
}
int main() {
A obj(5);
f(obj);
return 0;
}
```
经过修改后,程序可以正常运行,输出为:
```
A:5
B:0
```