对象类c ++

时间:2011-10-21 14:25:12

标签: c++

我是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方法时,它就不起作用了。此外,当我使用rvector)执行某些操作时程序退出失败...我是否必须以某种方式调用其构造函数?如果是这样,我该怎么做?

感谢您的帮助。

2 个答案:

答案 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的刷新,但我想如果你使用调试器,应该很容易找出问题所在。