C ++类实现[关闭]

问题描述 投票:-4回答:1

编辑原始问题,因为它标记得太宽泛。如果我有类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;
       }
    }
};
c++ class
1个回答
2
投票

虽然这不是一个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; 
}

这是我的一个较旧的类,这不是完整的类,因为它有其他成员函数,不是normalizedotlength等运算符。我只是用它的构造函数和运算符展示了类,以演示你可能会怎样做类似于矩阵类的东西。


作为参考,如果你想看看如何实现多功能矩阵类,有两个主要的库值得检查并读取它们的文档和源文件:GLM是一个仅头文件库,非常容易设置和使用。另一方面,Eigen更多地参与设置,并且确实有一点学习曲线可供使用。

© www.soinside.com 2019 - 2024. All rights reserved.