C ++实例化另一个类中的对象

时间:2017-06-13 12:29:38

标签: c++

#include <iostream>
using namespace std;

class Circle{
    private:
        float radius;
        float xCoord;
        float yCoord;
    public:
        Circle():radius(0),xCoord(0),yCoord(0){};
        Circle(float r, float x, float y): radius(r), xCoord(x),yCoord(y){};

        void PrintCircle(){
            cout << radius << ' ' << xCoord << ' ' << yCoord;
        }
};

class Cylinder{
    private:
        Circle circle;
        float height;
    public:
        Cylinder():height(0){};
        Cylinder(float r, float x, float y, float h):circle(r,x,y),height(h){};

        void PrintCylinder(){
            circle.PrintCircle();
            cout << ' ' << height << endl;
        }
};

int main(){
    Cylinder c1;
    c1.PrintCylinder();

    Cylinder c2(5,5,5,5);
    c2.PrintCylinder();

    return 0;
}

输出:

0 0 0 0
5 5 5 5

Cylinder class中,我声明了一个Circle对象成员,它调用了Circle的默认构造函数。 Cylinder c1验证了这一点。然后在Cylinder c2中,我使用Circle对象上的另一个Circle构造函数。

我的问题 - Circle中的c2对象是否使用了两个构造函数?为什么这样做?或者这只是类中的对象声明如何工作?

编辑: 我不是在询问有关成员初始化列表的信息。

假设我想使用其默认构造函数在Circle中创建一个main()对象。

int main(){
    Circle c;
}

现在查看Cylinder类的数据成员。

class Cylinder{
    private:
        Circle circle; //Default constructor?
        float height;
}

创建Cylinder对象时,Circle circle会自动调用其默认构造函数吗?如果确实如此,那就把我带到了“两个构造者”的观点。

对于Cylinder c2,这意味着由于Circle,其Circle()对象会调用其构造函数Circle(float r, float x, float y),然后调用Cylinder(float r, float x, float y, float h):circle(r,x,y),height(h){}

0 个答案:

没有答案