c++预定义实例
c++ predefined instances
我正在设计一个Vector3D类,并希望能够轻松访问一些经常使用的向量,例如笛卡尔基向量和原点。下面是一个使用静态成员的方法。这是实现目标的正确方法吗?性能将是关键。
vector.h
#include <iostream>
class Vector3D {
public:
Vector3D(double x=0.0, double y=0.0, double z=0.0) :
x_(x),
y_(y),
z_(z) {};
inline void print() const {
std::cout << x_ << " " << y_ << " " << z_ << std::endl;
}
// Predefined Vectors
static Vector3D ZERO;
static Vector3D X;
static Vector3D Y;
static Vector3D Z;
double x_, y_, z_;
};
vector.cpp
#include "vector.h"
// Predefined vectors
Vector3D Vector3D::ZERO = Vector3D(0.0f, 0.0f, 0.0f);
Vector3D Vector3D::X = Vector3D(1.0f, 0.0f, 0.0f);
Vector3D Vector3D::Y = Vector3D(0.0f, 1.0f, 0.0f);
Vector3D Vector3D::Z = Vector3D(0.0f, 0.0f, 1.0f);
类可以这样使用:
main.cpp
#include "vector.h"
int main()
{
Vector3D o = Vector3D::ZERO;
Vector3D x = Vector3D::X;
Vector3D y = Vector3D::Y;
Vector3D z = Vector3D::Z;
o.print();
x.print();
y.print();
z.print();
return 0;
}
您缺少const
标识符。你不希望有人不小心修改ZERO =)
也可以使用静态方法:
struct Vector3D
{
//...
static Vector3D const & ZERO()
{
static Vector3D zero_(0,0,0);
return zero_;
}
};
尽可能使用const - Scott Meyers
,你的代码很好,另外你可以使用const
class Vector3D
{
// ...
static const Vector3D ZERO;
static const Vector3D X;
static const Vector3D Y;
static const Vector3D Z;
};
const Vector3D Vector3D::ZERO = Vector3D(0.0f, 0.0f, 0.0f);
const Vector3D Vector3D::X = Vector3D(1.0f, 0.0f, 0.0f);
const Vector3D Vector3D::Y = Vector3D(0.0f, 1.0f, 0.0f);
const Vector3D Vector3D::Z = Vector3D(0.0f, 0.0f, 1.0f);
(我不确定)const
关键字可以帮助编译器做更好的优化
main函数的前四行应该是为静态成员向量赋值地址的指针。
见:http://www.learncpp.com/cpp-tutorial/811-static-member-variables/类的成员变量可以通过使用static关键字设置为静态。不管定义了多少类对象,静态成员变量在程序中只存在一次!考虑这个问题的一种方法是,类的所有对象都共享静态变量。"
您可以更改类/文件的名称,vector是标准库模板类
相关文章:
- #定义c-预处理器常量..我做错了什么
- 如何摆脱为条件编译定义预处理器宏的需要?
- __CHAR_BIT__宏是否为 MSVC 编译器预定义?
- 在哪里定义了预定义'user-defined'文本"m"的标准库?
- 如何打印预定义的cflags
- gcc 中的模板显式实例化(定义和声明)
- 交换包含非一般可复制类型的“std::aligned_storage”实例-未定义的行为
- 适用于 64 位系统的预定义宏
- 如何预定义<atomic>变量?
- 将文本文件中的特定单词:C++替换为预定义值
- 在不使用预定义的C++函数的情况下,按字母顺序打印存储在哈希表中每个索引处的名称
- c++ 11:显式实例化声明vs显式实例化定义
- 当显式模板实例化定义在显式声明之前时,GCC和clang不同意
- 显式模板实例化定义是否也抑制隐式实例化
- 两个值的最大值,其中一个不能等于预定义值
- 将char转换为预定义的ascii值
- 结构体的预定义,错误
- 引用预定义的QMediaPlayer
- 是否可以用n个键初始化std::map,其中n是预定义的
- 用于标识调用函数的预定义宏