Java程序员 - C++人如何使用类?指向类,默认参数的指针?

7 c++ constructor pointers

我了解面向对象编程的方法,但我已经习惯了Java,直到最近我才接触过C++.

我认为我的问题与语法无关,与C++中的OOP哲学有关.我理解指针和地址与堆栈和堆之间的区别,以及东西,但我仍然觉得我错过了一些东西.

这是一个例子:我有一个包含一些数据的类(Shape).我有另一个类(App)使用了许多形状.

class Square {
    private: 
        int x;
        int y;
        int size;

    public:
        /* constructor */
        Square(int x, int y, int size);
}


class App {
    private:
        Square redSquare;
        Square blueSquare;

    public:
        void setup();
        void draw();
}
Run Code Online (Sandbox Code Playgroud)

在某些时候,某些东西将实例化我的应用程序并调用setup().问题在于,当我声明App类(在App.hpp中,比方说)时,"redSquare"和"blueSquare"被实例化,而不仅仅是声明.作为一名Java程序员,我将在本例中在setup()中实例化我的类.但是这意味着我不能像上面那样做,我必须将redSquare和blueSquare设置为POINTERS,然后我可以在setup()中使用new创建它们.

但是你会怎么做呢?或者你会使用默认参数创建一个构造函数,如上所述创建redSquare和blueSquare,然后使用像Square.init(x,y,size)之类的东西在App.setup()中设置这些方块的值?或者其他一些方式?

你有没有汇总课程,或只有指针?

我当然可以通过这种方式破解它,所以它可以自己工作,但我有一种感觉,我正在做"Java方式",而不是得到C++程序员的想法.

Éri*_*ant 6

在我看来,问题来自于"setup()"方法的存在.IIUC,意图是使用App作为:

App a;
a.setup();
Run Code Online (Sandbox Code Playgroud)

在调用setup()之前处于什么状态是"a"?如果调用draw()会发生什么?如果答案类似于"在使用App对象完成任何操作之前必须调用setup()",那么这意味着setup()是App的"真正"构造函数,而App的当前ctor是无意义的.结论:删除"setup()"方法并将其替换为有意义的ctor.


Edo*_* A. 2

您需要在 App 构造函数中指定构造函数的参数,例如

App(int bx, int by, bsize, int rx, int ry, int rsize) : 
blueSquare(bx, by, bsize), redSquare(rx, ry, rsize) {}
Run Code Online (Sandbox Code Playgroud)

这只是一个示例,您可能会使用更好的设计 IRL。