#include <iostream>
using namespace std;
class Object {
public:
double s;
char* name;
virtual void input(){}
Object():s(0),name(NULL){}
void output() {
cout << name << " " << s << endl;
}
};
class Rectangle :public Object {//长方形
public:
virtual void input();
Rectangle() :Object() {}
};
class Circle :public Object {//圆
public:
virtual void input();
Circle() :Object() {}
};
void Rectangle::input() {
name =(char *) "Rectangle";
int a, b;
cin >> a >> b;
s = a * b;
}
void Circle::input() {
name = (char*)"Circle";
int r;
cin >> r;
s = r * r * 3.14;;
}
int main()
{
int num = 0;
cin >> num;//num是输入的几何形体的个数
Object** p = new Object * [num];
for (int i = 0;i < num;i++) {
char shape;
cin >> shape;
switch (shape)//根据不同的形状,分配出不同的几何形体类。
{
case 'R':
Rectangle * rp = new Rectangle;
p[i] = rp;
p[i]->input();
case 'C':
Circle * rc = new Circle;
p[i] = rc;
p[i]->input();
default:
break;
}
}
delete[] p;
return 0;
}
如图switch块内的加粗语句。
调试显示错误:
如果用if语句代替就是对的,这是为什么?
因为多个case属于同一个作用域 case 'C'中可以访问rp,但是rp可能没有被初始化,使用{}声明独立的作用域 或者 break提前返回