如何初始化类的数据成员,以便这些数据成员是其他类的对象(在C++中)

how to initialise data members of a class such that those data members are objects of some other class(in C++)

本文关键字:数据成员 对象 其他 C++ 初始化      更新时间:2023-10-16

代码包括

类点 { 公共: 国际 x, y; };

class lineSeg
{
public:
    point p1,p2;
};
bool seg(lineSeg l1, lineSeg l2){/* code to check whether two line segments intersect or not*/}

int main(){/* 调用函数 seg*/}

函数 seg 要求类 lineSeg 的对象

作为参数传递。 类 Point 的对象是类 lineSeg 的数据成员。在这种情况下,如何初始化 lineSeg 类数据成员。

您可以使用聚合初始化动态创建临时值:

seg(lineSeg{point{1, 2}, point{3, 4}}, lineSeg{point{5, 6}, point{7, 8}});

或者只是:

seg(lineSeg{{1, 2}, {3, 4}}, lineSeg{{5, 6}, {7, 8}});

或带支线

seg(lineSeg{1, 2, 3, 4}, lineSeg{5, 6, 7, 8});

或者,完全令人讨厌:

seg({1, 2, 3, 4}, {5, 6, 7, 8})

也许是这样的:

lineSeg l1{{1,2},{3,4}};
lineSeg l2{{5,6},{7,8}};
auto res = seg(l1, l2);

虽然其他解决方案更好,但它们依赖于您拥有最新的编译器和对语言的理解。这很简单,不是很优雅,但几乎适用于任何编译器:

class point
{
public:
    int x;
    int y;
};
class lineSeg
{
public:
    point p1;
    point p2;
};
bool seg(lineSeg l1,lineSeg l2)
{
    return false; // insert real code here
}
int main()
{
    lineSeg ls1;
    lineSeg ls2;
    ls1.p1.x = 0;
    ls1.p1.y = 0;
    ls1.p2.x = 5;
    ls1.p2.y = 5;
    ls2.p1.x = -1;
    ls2.p1.y = -1;
    ls2.p2.x = 1;
    ls2.p2.y = 1;
    bool result = seg(ls1, ls2);
    // do stuff with result
    return 0;    
}