C++ Class implementation
C++ Class implementation
编辑原始问题,因为它被标记为太宽泛。如果我有一个类 Class1 的对象读取数组的值,我该如何读取类中的值,以便它可以存储并与同一类的其他对象一起使用。我尝试在下面创建一个构造函数并将值插入变量中,这是正确的方法吗?注意:我是C程序员,试图弄清楚C++世界中的事情
int main()
{
Class1 Classobj1 = {2,3,4};
}
class Class1{
int *a = new int[3] ;
Class1(int *p)
{
for(int i=0;i<3;i++)
{
*a = *p;
}
}
};
虽然这不是一个Matrix
类,而是一个简单的Vector2
类,它接受floats
这个类演示了如何重载operators
。
class Vector2 {
public:
union {
float _f2[2];
struct {
float _x;
float _y;
};
};
inline Vector2();
inline Vector2( float x, float y);
inline Vector2( float *pfv );
// Operators
inline Vector2 operator+( const Vector2 &v2 ) const;
inline Vector2 operator+() const;
inline Vector2& operator+=( const Vector2 &v2 );
inline Vector2 operator-( const Vector2 &v2 ) const;
inline Vector2 operator-() const;
inline Vector2& operator-=( const Vector2 &v2 );
inline Vector2 operator*( const float &value ) const;
inline Vector2& operator*=( const float &value );
inline Vector2 operator/( const float &value ) const;
inline Vector2& operator/=( const float &value );
inline friend Vector2 Vector2::operator*( const float &fValue, const Vector2 v2 ) {
// Pre Multiple Vector By A Scalar
return Vector2( value*v2._x, value*v2._y );
}
inline friend Vector2 Vector2::operator/( const float &value, const Vector2 v2 ) {
// Pre Divide Vector By A Scalar
Vector2 vec2;
// Math:: external class not shown here isZero() to check if value is minimally close to 0
if ( Math::isZero( v2._x) )
vec2._x= 0.0f;
else
vec2._x = value / v2._x;
if ( Math::isZero( v2._y ) )
vec2._y = 0.0f;
else
vec2._y = value / v2._y;
return vec2;
}
};
inline Vector2::Vector2() :
_x(0.0f), _y(0.0f) {
}
inline Vector2::Vector2( float x, float y ) :
_x(x), _y(y) {
}
inline Vector2::Vector2( float *pv ) :
_x( pv[0] ), _y( pv[1] ) {
}
inline Vector2 Vector2::operator+() const {
return *this; // Unary + Operator
}
inline Vector2 Vector2::operator+( const Vector2 &v2 ) const {
// Binary + Take This Vector And Add Another Vector To It
return Vector2( _x + v2._x, _y + v2._y );
}
inline Vector2 &Vector2::operator+=( const Vector2 &v2 ) {
_x += v2._x;
_y += v2._y;
return *this;
}
inline Vector2 Vector2::operator-() const {
return Vector2( -_x, -_y ); // Unary - Operator: Negate Each Value
}
inline Vector2 Vector2::operator-( const Vector2 &v2 ) const {
// Unary - Take This Vector And Subtract Another Vector From It
return Vector2( _x - v2._x, _y - v2._x );
}
inline Vector2 &Vector2::operator-=( const Vector2 &v2 ) {
_x -= v2._x;
_y -= v2._y;
return *this;
}
inline Vector2 Vector2::operator*( const float &value ) const {
// Post Multiply Vector By A Scalar
return Vector2( _x*value, _y*value );
}
inline Vector2& Vector2::operator*=( const float &value ) {
// Multiply This Vector By A Scalar
_x *= value;
_x *= value;
return *this;
}
inline Vector2 Vector2::operator/( const float &value ) const {
// Post Divide Vector By A Scalar
Vector2 vec2;
// Again Math:: not shown here...
if ( Math::isZero( value ) ) {
vec2._x = 0.0f;
vec2._y = 0.0f;
} else {
float inv = 1/value;
vec2._x *= inv;
vec2._y *= inv;
}
return vec2;
}
inline Vector2& Vector2::operator/=( const float &value ) {
// Divide This Vector By A Scalar Value
// Same as above; Math:: not shown here.
if ( Math::isZero( value ) ) {
_x = 0.0f;
_y = 0.0f;
} else {
float inv = 1/value;
_x *= inv;
_y *= inv;
}
return *this;
}
这是我的一个较旧的类,这不是完整的类,因为它具有其他不是运算符的成员函数,例如normalize
,dot
,length
等。我刚刚展示了该类及其构造函数和运算符,以演示如何使用矩阵类执行类似操作。
作为
参考说明,如果您想了解如何实现通用矩阵类,有两个主要的库值得查看并通读其文档和源文件:GLM
是一个仅标头库,非常易于设置和使用。 另一方面,Eigen
设置起来要多一些,并且确实有一点学习曲线需要习惯。
- 格利姆
- 特征
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- Softmax Implementation in C++
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- C2011 'CMemDC':Visual Studio 2019中的'class'类型重新定义
- TypeError: [c++ addon class] 不是构造函数
- C++ class template
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- Clearing Class Foo with new(pFoo) Foo()
- C++ class vs a library
- C++ Class implementation
- C++ `Timer` class implementation