我了解面向对象编程的方法,但我已经习惯了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(); }
在某些时候,某些东西将实例化我的应用程序并调用setup().问题在于,当我声明App类(在App.hpp中,比方说)时,"redSquare"和"blueSquare"被实例化,而不仅仅是声明.作为一名Java程序员,我将在本例中在setup()中实例化我的类.但是这意味着我不能像上面那样做,我必须将redSquare和blueSquare设置为POINTERS,然后我可以在setup()中使用new创建它们.
但是你会怎么做呢?或者你会使用默认参数创建一个构造函数,如上所述创建redSquare和blueSquare,然后使用像Square.init(x,y,size)之类的东西在App.setup()中设置这些方块的值?或者其他一些方式?
你有没有汇总课程,或只有指针?
我当然可以通过这种方式破解它,所以它可以自己工作,但我有一种感觉,我正在做"Java方式",而不是得到C++程序员的想法.
在我看来,问题来自于"setup()"方法的存在.IIUC,意图是使用App作为:
App a; a.setup();
在调用setup()之前处于什么状态是"a"?如果调用draw()会发生什么?如果答案类似于"在使用App对象完成任何操作之前必须调用setup()",那么这意味着setup()是App的"真正"构造函数,而App的当前ctor是无意义的.结论:删除"setup()"方法并将其替换为有意义的ctor.