用于访问类中的类对象的函数
Function for accessing class object within class
我有一个名为Position的类,它包含成员变量X,Y和Z,以及其他一些公共成员函数。
class Position{
public:
void SetPos(double X, double Y, double Z);
private:
double X, Y, Z;
};
然后我有另一个类,其中包含一个"位置"作为私有成员变量。
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 值。
GetPos 是一个对对象而不是类调用的函数。
NewClass newClassObject;
Position p = newClassObject.GetPos();
SomeFunction(p);
我想通了。我不得不更改函数以通过引用返回
class NewClass{
const Position& GetPos();
private:
Positon classPos;
};
const Position& NewClass::GetPos() { return classPos;}
(我假设Position
是一个默认复制构造函数是不够的类,即浅拷贝将导致未定义的行为。我也忽略了您在评论中指出的明显错别字,您知道它们。
在任一示例中都不会调用赋值运算符重载。按值将对象传递给函数会调用移动或复制构造函数,前提是未省略副本。第二个例子
Position new_pos = some_new_class.GetPos();
是副本初始化的一个示例。此语句也不会调用operator=
。尽管语法如此,但由于 rhs 的类型为 Position
,它实际使用的还是复制构造函数。通常,复制初始化将仅考虑非显式构造函数和用户定义的转换。
相关文章:
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数