Вопрос о синтаксисе C ++ - PullRequest
       0

Вопрос о синтаксисе C ++

1 голос
/ 21 сентября 2010

Я очень плохо знаком с 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 ]

2 голосов
/ 21 сентября 2010

1) Да, MyClass наследует State. Публичность означает, что все ее общедоступные функции все еще будут публичными в производном классе.
2) Да, это конструктор.
3) Const означает, что объект не будет изменен. «&» Означает, что вы передаете ссылку на объект. Это означает, что вы не копируете весь объект в стеке. Он просто говорит, что это где объект (то есть относится к нему). Это экономит пространство стека и время копирования.
4) operator = - перегрузка оператора. Это означает, что вы можете сделать следующее:

MyClass a;
MyClass b;

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

5) BaseEntity (id) означает, что конструктор вызывает базовый класс, BaseEntity's, конструктор. Идентификатор в этом случае предположительно является глобальным или статическим членом класса, в противном случае код не будет компилироваться.
6) Вы можете «переписать» это так, но лучше сделать первое.

0 голосов
/ 21 сентября 2010

Хорошо, отвечаю на ваши вопросы по одному:

class MyClass : public State // MyClass inherits State?

именно так.MyClass наследует (публично, что обычно является единственным видом наследования, о котором вы заботитесь) от State.В буквальном смысле, MyClass "является" State - все, что верно в отношении 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. Ваша вторая форма этого конструктора очень похожа на вашу первую форму,но первый - с использованием списка инициализации - считается лучшей формой.

0 голосов
/ 21 сентября 2010

BaseEntity - это просто еще один список инициализаторов.Вы действительно можете переписать код в соответствии с предложением и достичь почти того же результата.Пожалуйста, смотрите:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...