补充下列代码,使得程序的输出为: A:3 A:15 B:5 3 15 5 类和函数接口定义: 参见裁判测试程序样例中的类和函数接口。 裁判测试程序样例: #include <iostream> using namespace std; class CMyClassA { int val; public: CMyClassA(int); void virtual print(); }; CMyClassA::CMyClassA(int arg) { val = arg; printf("A:%d\n", val); } void CMyClassA::print() { printf("%d\n", val); return; } /* 在这里填写代码 */ int main(int argc, char** argv) { CMyClassA a(3), *ptr; CMyClassB b(5); ptr = &a; ptr->print(); a = b; a.print(); ptr = &b; ptr->print(); return 0; } 输入样例: None 输出样例: A:3 A:15 B:5 3 15 5 来源: openjudge.cn
时间: 2024-03-08 19:49:25 浏览: 64
补充代码如下:
```
#include <iostream>
using namespace std;
class CMyClassA {
int val;
public:
CMyClassA(int);
void virtual print();
CMyClassA& operator=(const CMyClassB& b);
};
class CMyClassB {
int val;
public:
CMyClassB(int);
void virtual print();
friend class CMyClassA;
};
CMyClassA::CMyClassA(int arg) {
val = arg;
printf("A:%d\n", val);
}
void CMyClassA::print() {
printf("%d\n", val);
return;
}
CMyClassA& CMyClassA::operator=(const CMyClassB& b) {
val = b.val * 3;
printf("A:%d\n", val);
return *this;
}
CMyClassB::CMyClassB(int arg) {
val = arg;
printf("B:%d\n", val);
}
void CMyClassB::print() {
printf("%d\n", val);
return;
}
int main(int argc, char** argv) {
CMyClassA a(3), *ptr;
CMyClassB b(5);
ptr = &a;
ptr->print();
a = b;
a.print();
ptr = &b;
ptr->print();
return 0;
}
```
这里需要在 CMyClassA 中添加一个赋值运算符的重载函数,使其能够将一个 CMyClassB 类型的对象赋值给一个 CMyClassA 类型的对象。同时,需要在 CMyClassB 类中声明 CMyClassA 是其友元,以便在赋值运算符的重载函数中访问 CMyClassB 的私有成员 val。
在赋值运算符的重载函数中,将 CMyClassB 的 val 成员变量乘以 3,然后将其赋值给 CMyClassA 的 val 成员变量。在 main 函数中,先输出 a 对象的 val,然后将 b 对象赋值给 a 对象,再次输出 a 对象的 val 和 b 对象的 val,最后输出 b 对象的 val。
阅读全文