c++ - "returning"一个不包含它的对象 C++

标签 c++ pointers object constructor

我希望这个问题没有被问过太多次,我尝试搜索但找不到任何东西(也许我只是不知道如何用正确的术语表达)。简单问题:

我有一个 vec3 类,它有 3 个字段 x、y 和 z 其中有一个 flatten 函数,我想返回一个只有字段 x 和 y 的 vec2 对象(或者可以从中构造 vec2 对象的东西)。因为这是 vec3 类中唯一与 vec2 有关的函数,所以我不想包含 vec2。有没有更好的方法来返回这样一个没有任何包含的简单对象(两个 double )?

我想返回一个指针,但如果我这样做会发生什么:

vec2 v2 = vec3(x,y,z).flatten();//vec3(x,y,z) 是构造函数

当 v2 试图从它们构造时,临时 vec3 对象 x 和 y 数据是否仍然存在?在这种情况下,vec2 = double* 将在 vec2 类中定义。

vec3 和 vec2 看起来像这样:

class vec3{
   double x,y,z;
}

x y 和 z 在内存中是连续的吗?我猜不会。

感谢您的宝贵时间。

最佳答案

你只需要一个返回类型的部分声明:

Vec3.h :

// No #include "Vec2.h" !

class vec2; // Partial declaration

class vec3 {
    //...
    vec2 flatten() const;
    //...
};

Vec3.cpp :

#include "Vec2.h"

vec2 vec3::flatten() const {
    //...
}

关于c++ - "returning"一个不包含它的对象 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31156272/

相关文章:

c++ - 用构造函数初始化一个n维 vector 不好吗?

javascript - 窗口对象、窗口函数和对象函数

c++ - 如何使用旋转矩阵?

c++ - VS2010 : How to run devenv to not parallelize the build

c++ - 在 FTP 服务器中正确实现 LIST 命令

c++ - 指针变量赋值

c++ - 从 STL 容器中删除元素时是否调用析构函数?

c - free() 无效指针

javascript - 创建具有属性的函数

javascript - 使用 lodash 比较并从数组中删除对象