#include<iostream> using namespace std; class C { public: C(int a) { x = a; } private: int x; }; class D :public C { public: D(int a) :y(a) {} private: int y; };错误详解
时间: 2024-03-14 19:48:19 浏览: 73
这段代码定义了两个类C和D,其中类D继承自类C。但是在类D的构造函数中,没有调用类C的构造函数进行初始化,这是不合法的。当类C没有默认构造函数时,子类D必须在构造函数中显式地调用类C的构造函数进行初始化。因此,需要在类D的构造函数初始化列表中调用类C的构造函数,如下所示:
```
class C {
public:
C(int a) { x = a; }
private:
int x;
};
class D : public C {
public:
D(int a) : C(a), y(a) {}
private:
int y;
};
```
这样就可以实现子类D对父类C的正确继承和初始化了。
相关问题
在一个平面游戏里,当一个大泡泡与一个小泡泡相遇时,会合并成一个更大的泡泡。新泡泡的圆心为两个泡泡的圆心的中点,新泡泡的面积为两个泡泡的面积之和。 请在下述代码中补充Bubble类的设计,使得下述代码可以正常运行。显然,你需要一个自定义oeprator+操作符函数。 裁判测试程序样例: //Project - EatBubble #include <iostream> #include <cmath> #include <cstdio> using namespace std; //在此处定义Bubb
le类,使得下述代码可以正常运行
```
class Bubble {
public:
Bubble(double x=0,double y=0,double r=0):x(x),y(y),r(r){}
double getX() const {return x;}
double getY() const {return y;}
double getR() const {return r;}
//自定义operator+操作符函数
Bubble operator+(const Bubble& b) const {
double new_x = (x + b.x) / 2;
double new_y = (y + b.y) / 2;
double new_r = sqrt(r * r + b.r * b.r);
return Bubble(new_x,new_y,new_r);
}
private:
double x,y,r;
};
int main() {
double x1,y1,r1,x2,y2,r2;
cin>>x1>>y1>>r1>>x2>>y2>>r2;
Bubble b1(x1,y1,r1),b2(x2,y2,r2);
Bubble b3 = b1 + b2;
printf("%.2f %.2f %.2f",b3.getX(),b3.getY(),b3.getR());
return 0;
}
```
指出下列程序的错误,说明错误的原因并改正。 #include <iostream> using namespace std; class A { int *p; A(int n) { p=new int; *p = n; } show(); ~A() { delete p; } }; show() { cout << *p << endl; } int main() { A a; a.show(); return 0; }
该程序存在以下几个错误:
1. 在类A中的构造函数没有声明为public,导致在main函数中无法实例化该类对象。
2. 在类A中的show函数没有声明为public或者private,导致该函数的访问权限默认为private,不可被main函数中的对象访问。
3. 在main函数中实例化A对象时,应该传入一个int类型的参数,但是该程序没有传参。
4. 在类A中的析构函数没有声明为public,导致在main函数中无法执行该对象的析构函数。
下面是修改后的程序:
```c++
#include <iostream>
using namespace std;
class A {
private:
int *p;
public:
A(int n) {
p=new int;
*p = n;
}
void show() {
cout << *p << endl;
}
~A() {
delete p;
}
};
int main() {
A a(10);
a.show();
return 0;
}
```
在修改后的程序中,我们将类A中的构造函数、析构函数和show函数都声明为public,同时在main函数中实例化A对象时传入了一个int类型的参数,程序就可以正确运行了。
阅读全文