2015-02-08 3 views
-6

Почему результат этого 3? Я не недооцениваю, что означает «Class1(): a (3)».Перегрузка оператора()

class Class1 
{ 
private: 
    int a; 
public: 
    Class1() :a(3) 
    {  
    }; 

    Class1(int f) 
    { 
     a = (int)f; 
    }; 
}; 

И это Главная

int main(void) 
    { 
     Class1 c11; 
     c11.print(); 
    } 
+0

Откройте любую книгу C++ хорошего начинающего и объясните, какие списки инициаторов участников. – rightfold

ответ

1

Class1() является конструктором.

Конструктор - это функция, которая инициализирует значения элементов класса при создании объекта. При этом, когда вы используете Class1 c11, конструктор вызывается и значение c11.a инициализируется 3.

Class1(): а (3) означает, что конструктор инициализации, как 3.

К узнать больше о конструкторы посетить эти ссылки

http://www.tutorialspoint.com/cplusplus/cpp_constructor_destructor.htm

http://www.cprogramming.com/tutorial/constructor_destructor_ordering.html

1

Это "member initializer list". Член переменной int a - это просто , номинированный со значением 3. Присвоение значения aв пределах конструктором будет присвоение.

Инициализационный список инициализирует переменные-члены (через собственный или родительский класс). Если переменная-член не содержится в списке, это default-initialized, т. Е. Вызывается их конструктор по умолчанию, который является для переменных-членов типа int, инициализацией со значением 0.

Вывод:

Инициализация переменной-члена в конструкторе itsself первым вызывает конструктор по умолчанию и затем присваивает особое значение элемента.

Смежные вопросы