注册 登录
编程论坛 C++教室

构造函数

呜呜1 发布于 2013-11-10 22:38, 627 次点击
#include <iostream>
#define   PI   3.14159
using   namespace  std;
class Point
{
    int x,y;
public:
    Point();
    Point(int, int);
    void change(int,int);
    void display();
};

class Circle:public Point
{
    int r;
    double s;
public:
    Circle();
    Circle(int,int,int);
    void change(int,int,int);
    double area();
    void display();
};

class Cylinder:public Circle
{
    int h;
    double v;
public:
    Cylinder();
    Cylinder(int,int,int,int);
    void change(int,int,int,int);
    double area();
    double V();
    void display();
};


//****************************************************************************************************//

Point::Point():x(0),y(0){}

Point::Point(int xx,int yy):x(xx),y(yy){}

void Point::change(int xx,int yy)
{
    x = xx;
    y = yy;
}

void Point::display()
{
    cout<<"x = "<<x<<endl
        <<"y = "<<y<<endl;
}
//*************************Circle*******************************/
Circle::Circle():Point(),r(0),s(0){}//

Circle::Circle(int xx,int yy,int rr):Point(xx,yy),r(rr),s(0){}

void Circle::change(int xx,int yy,int rr)
{
    Point::change(xx,yy);
    r = rr;
}

double Circle::area()
{
    return s = PI*r*r;
}

void Circle::display()
{
    Point::display();
    cout<<"r = "<<r<<endl
        <<"s = "<<area()<<endl;
}
//*************************Cylinder*******************************/

Cylinder::Cylinder():Circle(),h(0),v(0){}

Cylinder::Cylinder(int xx,int yy,int rr,int hh):Circle(xx,yy,rr),h(hh),v(0){}

void Cylinder::change(int xx,int yy,int rr,int hh)
{
    Circle::change(xx,yy,rr);
    h = hh;
}

double Cylinder::area()
{
    return Circle::area();
}

double Cylinder::V()
{
    return v = area()*h;
}

void Cylinder::display()
{
    Circle::display();
    cout<<"h = "<<h<<endl;
    cout<<"v = "<<V()<<endl;
}
//****************************************************************************//
void main()
{
    Cylinder cld(4,5,2,4);
    cld.display();
    cld.change(12,15,57,32);
    cout<<"更改之后:"<<endl;
    cld.display();
    system("pause");
}





为什么程序中有Point();和Point(int, int);两个构造函数,去掉Point();程序就出错,这是为什么?Point();有什么作用啊
4 回复
#2
北辰风2013-11-10 22:53
Circle::Circle():Point(),r(0),s(0){}//这个是初始化,就是r=0;s=0;
Circle::Circle(int xx,int yy,int rr):Point(xx,yy),r(rr),s(0){}  //这个是传递参数,功能不一样
#3
进发2013-11-11 11:10
point()是无参数构造函数,point(int int)是重载构造函数,在初始化时对号入座,如果没有重载构造函数,无参数构造函数就可以省略,因为可以自动生成。初始化必备。

[ 本帖最后由 进发 于 2013-11-11 11:15 编辑 ]
#4
IT男year2013-11-12 17:46
1、Point();和Point(int, int);是重载构造函数。
2、Point();Circle();Cylinder();这三个都无参构造函数。
3、当你去掉Point();后,类Circle的无参构造函数Circle():Point(),r(0),s(0){}去调用类Point的无参构造函数就找不到了。所以会报错!
#5
阿彬2013-11-14 13:14
以下是引用IT男year在2013-11-12 17:46:25的发言:

1、Point();和Point(int, int);是重载构造函数。
2、Point();Circle();Cylinder();这三个都无参构造函数。
3、当你去掉Point();后,类Circle的无参构造函数Circle():Point(),r(0),s(0){}去调用类Point的无参构造函数就找不到了。所以会报错!
此大神解释的很明确,在构造函数和重构函数的使用方面,要注意调用的区别。(授人以鱼,不如授人以渔),举一反三,加强这方面的练习!值得我们学习……
1