实例化一个单独文件中的类?

时间:2014-07-15 22:45:33

标签: java c++ class instantiation

所以我习惯了Java,但我学习的是C ++,对我来说最重要的是我喜欢为很多东西创建单独的类。并将这些类保存在他们自己的单独文件中,就像Java一样。但在java中我会通过说Class.method(arguments)来访问另一个类;我怎么用C ++做到这一点?

这是具体的代码

的main.cpp

int main(int argc, char** argv) {

    Vector2f a = new Vector2f(2.0f, 4.0f);

    std::cout << "Magnitude :" << mod(a);
    return 0;
}

这是类文件

class Vector2f{ 

    private:

        float _x;
        float _y;

    public:

        //Constructor
        void Vector2f(float x, float y){

            _x = x;
            _y = y;
        }

        //Vector Operations

        float dot(Vector2f a, Vector2f b){

            return (a.getX()*b.getX()) + (a.getY()*b.getY());
        }

        float mod(Vector2f a){

            return sqrt((a.getX()*a.getX())+(a.getY()*a.getY()));
        }


        //Getters and Setters

        void setX(float x){
            _x = x;
        }
        void setY(float y){
            _y = y;
        }
        float getX(){
            return _x;
        }
        float getY(){
            return _y;
        }

};

为什么这不起作用?应该只创建一个vector类的实例??

2 个答案:

答案 0 :(得分:0)

首先,请注意您正在定义所有内联方法,您可能已经或可能没有这些方法。

其次,如果您想从Vector2f访问main.cpp,则必须#include定义该类的头文件。

如果没有这个#include,编译器会看到类和方法声明,所以会抱怨你试图实例化一个它不知道的类。

第三,您正在使用new,它返回一个指针,因此您需要将变量声明为指针类型。

Vector2f* a = new Vector2f(2.0f, 4.0f);

此外,如果使用new在堆上创建对象,则在完成使用后应delete

delete a;

或者,如果要在堆栈(而不是堆)上实例化,则可以按照其他答案的建议进行实例化。

Vector2f a(2.0f, 4.0f);

第四,你的类中有很多编译错误,在尝试实例化对象之前你可能想要修复它。例如,即使在Java中,构造函数也不会返回void

答案 1 :(得分:0)

首先,您不需要在构造函数前面void。您的构造函数可以像这样构造:

Vector2f(float x, float y){

    _x = x;
    _y = y;
}

对于课堂内的功能,您不必为其创建另一个参数。所以你的功能可能是:

float dot(Vector2f b){

    return (getX()*b.getX()) + (getY()*b.getY());
}

float mod(){

    return sqrt((getX()*getX()) + (getY()*getY()));
}

与其他功能相同。

访问类中的函数。你这样做:className.functionName(); 您不必使用关键字new来创建新实例。 new的作用是在堆内创建对象,如果使用new创建对象,则必须在完成后使用delete。否则,它将导致泄漏记忆。主要的,你可以这样做:

int main()
{
    Vector2f a(2.0f, 4.0f);
    std::cout << "Magnitude :" << a.mod() << std::endl;
    return 0;
}