我是C ++的初学者但知道面向对象的编程..
我有一个类,它有一些不同类的对象。
class machine{
public:
int func();
private:
Plug p;
std::vector<Rot> r;
Ref ref;
};
这是正确的方法吗?我不太确定的原因是因为如果我在cout << this->r.size()
中执行类似func
的操作,则它不会输出任何内容(我有正确的包含和命名空间)。编译器编译它,但程序说run failed
。没有其他消息。我正在使用最新的Cygwin编译器g ++编译器。
编辑:我只是想确保这是定义类成员对象的正确方法。所以Plug p;
:这是正确的吗?因为如果我在Plug
内调用machine
类中的方法,那么当我在main()
中调用Plug方法时,它就不起作用了。此外,当我使用r
(vector
)执行某些操作时程序退出失败...我是否必须以某种方式调用其构造函数?如果是这样,我该怎么做?
感谢您的帮助。
答案 0 :(得分:1)
你需要阅读真正基本的C ++主题,比如构造函数。实例化机器对象时,将调用构造函数。在您的情况下,编译器创建的默认构造函数。这个不可见的默认构造函数也将调用p,r和ref的默认构造函数。
关于你的输出,试试cout&lt;&lt; r.size()&lt;&lt; ENDL;刷新缓冲区。请注意,您还必须在main()中调用x.func(),其中x是机器的实例。
你的主要是什么样的?
另外,请注意,C ++比许多其他语言更需要让您更好地理解基础知识 - 这意味着需要大量阅读并尝试使用示例来测试您的理解。这种语言有许多陷阱和陷阱 - 我不建议猜测或者过多地考虑其他OO语言中的细节如何可能适用于C ++。
答案 1 :(得分:0)
回答实际问题:是的,这是定义数据成员的正确方法。每个数据成员的构造函数都会自动调用,编译器会为其生成必要的代码。
你发布的代码没有任何问题,虽然它当然只是一个摘录,所以很难说出现了什么问题。
r.size()
实际上只有this->r.size()
。如果你得到一个“运行失败”错误,它不能只是缺少对cout的刷新,但我想如果你使用调试器,应该很容易找出问题所在。