在初始化下面的成员变量theOtherThing时,OtherThing类有一个构造函数,它接受类型为" Line"的对象,但是我没有通过SomeClass传递argLine'构造函数。我想在构造函数中声明一个新的Line对象,但我不知道如何。我想我可以在构造函数的主体中初始化它,也许我试图过于光滑。
SomeClass::SomeClass(const Polygon& argPoly,
const Point& argPoint)
//No argLine being passed here
:
thePolygon (argPoly),
thePoint (argPoint),
theOtherThing (new OtherThing(Line())), //Something like this
//But, the above does not work
//Nor (new OtherThing(Line aLine))
//Nor (new OtherThing(new Line())
{}
OtherThing类有一个构造函数,它接受" Line"
类型的对象OtherThing::OtherThing(const Line& argLine)
:
theLine (argLine)
{}
Line有一个默认构造函数,用于初始化其数据成员。
Line::Line()
{
//Data members get initilized here
}
我该怎么做?也许我过于复杂化了。
修改
其他声明:
Private :
OtherThingPtr theOtherThing //It's an implementaion of C++ std::shrd_ptr
修改
线类
class Line
{
public:
double this;
double that;
Line();
... some other constructors and methods
}
OtherThing Class
class OtherThing : RefCountedObj
{
public:
OtherThing(const Line& argLine)
private:
Line theLine;
...
}
答案 0 :(得分:1)
与Line()
的变体将编译。 OtherThing
构造函数接受左值引用,传递rvalue(临时对象);您可以在Line
构造函数中使用此临时OtherThing
对象。问题是theLine
的类型。
如果theLine
为const Line&
,并且在构造对象后引用theLine
,则将调用未定义的行为。如果theLine
只是Line
,则调用复制构造函数,这应该没问题。
答案 1 :(得分:0)
基于 OtherThing 这个类,像thePolygon& thePoint和 OtherThing 的代码如下(如上所述):
class OtherThing
{
OtherThing(const Line& argLine) : theLine(argLine){}
Line theLine;
};
您只需要执行以下操作:
SomeClass::SomeClass(const Polygon& argPoly,
const Point& argPoint)
//No argLine being passed here
:
thePolygon (argPoly),
thePoint (argPoint),
theOtherThing (Line()), ...