第一题,因为age是基类的private成员,所以在子类的成员函数中是不允许直接对它进行赋值的。将其改为公有,则没有问题。构造函数执行的顺序是先构造基类,再构造子类,析构函数则正好相反,先析构子类,再析构基类。
第二题:
class Circle
{
public:
Circle(int x){Radius = x;}
double mianji(){return 3.14*Radius*Radius;}
private:
int Radius;
};
class Table
{
public:
Table(int h,int c){height = h;color = c;}
int getheigh(){return height;}
int getcolor(){return color;}
private:
int height;
int color;
};
class Roundtable :public Circle,public Table
{
public:
Roundtable(int r,int h,int c)
:circle(r),table(h,c){}
double getMianji(){return circle.mianji();}
int getHeight(){return table.getheight();}
int getColor() {return table.getcolor();}
private:
Circle circle;
Table table;
};
第三题:
class Shape
{
public:
virtual double GetPeri()=0;
virtual double GetArea()=0;//纯虚函数
};
class Rectangle:public Shape
{
public:
Rectangle(int a,int b)
{
chang = a;
kuan = b;
}
double GetPeri(){return (chang+kuan)*2;}//重写基类的虚函数
double GetArea(){return chang*kuan;}
private:
int chang;
int kuan;
};
class Circle:public Shape
{
public:
Circle(int r){radius=r;}
double GetPeri(){return 3.14*radius*2;}
double GetArea(){return 3.14*radius*radius;}
private:
int radius;
};
class Square:public Rectangle
{
public:
Square(int a)
:Rectangle(a,a)//成员初始化器,用来构造它的直接基类。
{
bianchang=a;
}//由于它的基类已有GetPeri函数和GetArea函数,所以该类中不用再重写。
private:
int bianchang;
};
//开始测试
int main()
{
Rectangle rec(2,3);
Circle circle(4);
Square square(5);
Shape* shape[3] = {&rec,&circle,&square};
cout <<"长方形的周长为 "<
return 0;
}
上述代码是直接用记事本写的,没在编译器上编译,应该问题不大。
啊呀呀,怎么自己一点都不动手,就这样让别人帮你做的呀。。。。
现在一看见代码,就头大!
笨,自己做!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!