class A { public: A(int n):val(n) { } virtual void Out() = 0; A Square() { return A(++val); }这段代码有啥问题
时间: 2024-03-14 16:49:28 浏览: 15
这段代码有两个问题,分别是:
1. A类是一个抽象类,其中定义了一个纯虚函数Out(),但是在A类中定义了一个Square()函数,其中返回了A类型的对象,这是错误的,因为抽象类是不能够被实例化的,也就是不能够创建抽象类的对象。
2. 在Square()函数中,通过++val对A类的成员变量进行了修改,这会导致返回的A类型对象的值与原对象不同,破坏了函数的语义。正确的做法是应该定义一个派生类B,继承自A,并在B中实现Out()函数和Square()函数,其中Square()函数返回一个B类型的对象,这样就可以保证Square()函数的正确性和语义了。
相关问题
补充下列代码,使得程序的输出为: 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
#include <iostream>
using namespace std;
class CMyClassA {
int val;
public:
CMyClassA(int);
void virtual print();
CMyClassA& operator=(const CMyClassB& b); // 添加赋值运算符重载函数
};
class CMyClassB : public CMyClassA { // 类的继承
public:
CMyClassB(int arg) : CMyClassA(arg * 3) { // 调用父类构造函数
printf("B:%d\n", arg);
}
void print() {
CMyClassA::print(); // 调用父类函数
printf("%d\n", val);
return;
}
};
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; // 将 CMyClassB 的 val 赋给 CMyClassA 的 val
return *this;
}
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;
}
class sample {public: sample(int val); //① ~sample();//② private: int a=2.5;//③ sample();//④}哪里有错误
这个代码有两个错误:
1. 在第3行中,将浮点数2.5赋值给整型变量a,这会导致精度损失。应该使用整型2。
2. 在第4行中,构造函数的声明缺少函数名。
修正后的代码如下:
```
class sample {
public:
sample(int val); // 构造函数声明
~sample(); // 析构函数声明
private:
int a = 2; // 成员变量声明并初始化
};
sample::sample(int val) {
// 构造函数定义
}
sample::~sample() {
// 析构函数定义
}
```