C ++语法问题

时间:2010-09-21 16:02:32

标签: c++ syntax

我是c +的新手,请帮我弄清楚这些操作符是如何工作的

class MyCalss : public State // MyClass inherits State?
{
private
MyClass(){} // Constructor for MyClass?
MyClass(const MyClass&);  // const means that invoking object will be not changed? What the meaning of '&' symbol? MyClass&

MyClass& operator = (const MyClass&) // What this statement exactly do? is it some kind operation overloading?

}

例如我有构造函数

MyClass2::MyClass2(int i):BaseEntity(id),
m_iTotal(5),
m_iMonye(5),
m_iLevel(10){}

什么是:这里的BaseEntity(id)意味着什么?

我可以像这样重写吗?

MyClass2::MyClass2(int i):BaseEntity(id)
{
m_iTotal = 5;
m_iMonye = 5;
m_iLevel = 10;
}

3 个答案:

答案 0 :(得分:2)

1)是MyClass继承State。公众意味着其派生类中的所有公共职能仍然是公开的 2)是的,这是一个构造函数 3)Const DOES表示不会更改对象。 “&”表示您传入对象的引用。这意味着您不会将整个对象复制到堆栈中。它只是说这是它所在的对象(即指它)。这节省了一些堆栈空间和复制时间。
4)operator =是一个运算符过载。这意味着您可以执行以下操作:

MyClass a;
MyClass b;

// Populate and b.
a = b; // Overwrite a with b.

5)BaseEntity(id)表示构造函数调用基类BaseEntity的构造函数。在这种情况下,id可能是全局或静态类成员,否则代码将无法编译 6)你“可以”像这样重写它,但通常做前者更好。

答案 1 :(得分:0)

BaseEntity只是初始化器列表中的另一个。您确实可以按照建议重写代码并获得几乎相同的结果。请参阅:

http://www.cprogramming.com/tutorial/initialization-lists-c++.html

答案 2 :(得分:0)

好的,一次一个地提出问题:

class MyClass : public State // MyClass inherits State?

完全如此。 MyClass从State继承(公开,通常是你唯一关心的继承)。从字面上看,MyClass“是一个”状态 - 关于State的所有真实情况对于MyClass也是如此。

private
MyClass(){} // Constructor for MyClass?

是的,MyClass(){}是MyClass的构造函数,特别是在这种情况下不带参数而什么都不做(没什么特别的 - 仍然会分配内存等)。但是,因为你已经创建了MyClass()private,所以没有其他任何东西可以调用它,这意味着除了MyClass方法之外你不能创建一个MyClass对象(没有参数)。

MyClass(const MyClass&);  // const means that invoking object will be not changed? What the meaning of '&' symbol? MyClass&

是的,const表示不会更改作为参数传递的对象。实际上,这就是复制构造函数 - 用于创建MyClass作为现有对象的克隆的特殊构造函数。同样,它是私人的,因此世界上大多数人都无法称呼它。 &表示通过引用传递参数 - 这可以防止编译器复制对象,这通常是一件好事。

MyClass& operator = (const MyClass&) // What this statement exactly do? is it some kind operation overloading?

这是复制赋值运算符,用于允许诸如`instance_a = instance_b;“之类的语句。

请注意,除非您自己定义,否则编译器会为您生成所有这三个版本的默认版本。

MyClass2::MyClass2(int i):BaseEntity(id),
m_iTotal(5),
m_iMonye(5),
m_iLevel(10){}

BaseEntity(id)与其他三行非常相似;它告诉编译器,当构造MyClass2时,它应该使用参数BaseEntity调用父类id的构造函数。你的第二种形式的构造函数与你的第一种形式非常相似,但第一种形式 - 使用初始化列表 - 被认为是更好的形式。