用于访问类中的类对象的函数

时间:2014-12-29 03:07:57

标签: c++

我有一个名为Position的类,它包含成员变量X,Y和Z,以及一些其他公共成员函数。

class Position{
public:
void SetPos(double X, double Y, double Z);
private:
double X, Y, Z; 
};

然后我有另一个包含“Position”作为私有成员变量的类。

class NewClass{
public:
Postion GetPos();
private:
Position classPos;
};

Position NewClass:GetPos() { return classPos;}

我要做的是通过使用GetPos函数来访问NewClass中的classPos:

SomeFunction(NewClass.GetPos());
Position new_pos = NewClass.GetPos();

然而,当我这样做时,它总是分配或传递不正确的值(1e61)。我确实有=运算符重载,当我通过函数(运算符函数)进入时,正确的值存在,但是在退出时它会恢复为1e61值。

3 个答案:

答案 0 :(得分:0)

GetPos是您在对象上调用的函数,而不是

NewClass newClassObject;
Position p = newClassObject.GetPos();
SomeFunction(p);

答案 1 :(得分:0)

我明白了。 我不得不将函数更改为按引用返回

class NewClass{
const Position& GetPos();
private:
Positon classPos;
};
const Position& NewClass::GetPos() { return classPos;}

答案 2 :(得分:0)

(我假设Position是一个默认拷贝构造函数不足的类,即浅拷贝会导致未定义的行为。我也忽略了你在评论中指出的显而易见的拼写错误意识到它们。)

在任何一个示例中都不会调用赋值运算符重载。通过值将对象传递给函数会调用移动或复制构造函数,假设副本没有被删除。第二个例子

Position new_pos = some_new_class.GetPos();

copy initialization的示例。该声明也不会调用operator=。尽管有语法,它实际使用的是什么,因为rhs的类型为Position,它是复制构造函数。通常,复制初始化仅考虑非显式构造函数和用户定义的转换。