2013-03-11 2 views
2

У меня трудное время, я изучаю классы в C++ сейчас, вот проблема, я имею, я должен объявить и определить конструктор, я не знаю, что я делаю неправильно, но не смог получить результат, пожалуйста, помогитеобъявление и определение конструктора класса и распечатки частных и общедоступных переменных?

#include <iostream> 
using namespace std; 

class exercise 
{ 
public: 
     //declaration: constructor of class exercise 
     int public_var; 
     int get_private_var(); 
private: 
     int private_var; 
    }; 

//definition: constructor of class exercise 
int exercise::get_private_var() 
{ 
     return private_var; 
} 

int main() 
{ 
     exercise object(2,3); 
     int pub_var = object.public_var; 
     int pri_var = object.get_private_var(); 
     cout << pub_var <<' '<<pri_var<<endl; 
     return 0; 
} 
+2

Конструктора почти как нормальная функция члена, но он должен иметь такое же имя, что и класс, и не имеет типа возвращаемого значения. –

+0

'упражнение (int a_public_var, int a_private_var);' это объявление. Попробуйте определение самостоятельно)) – borisbn

ответ

2

Пробу конструктор будет:

class exercise 
{ 
public: 
    exercise(int,int); 
    int public_var; 
    int get_private_var(); 
private: 
    int private_var; 
}; 

//Constructor definition 
exercise::exercise(int a, int b) 
{ 
    public_var = a; 
    private_var = b 
} 
//rest of member functions 
0

для того, чтобы объявить конструктор Вам необходимо

class exercise 
{ 
    public: 
    //declaration: constructor of class exercise 
    exercise(); 
    int public_var; 
    int get_private_var(); 
    private: 
    int private_var; 

};

В целях реализации (как правило, в .cpp файле) вы должны:

exercise::exercise() 
{ 
    //your code here 
} 

удачи

+0

, может быть, было бы лучше «упражнение :: упражнение():/* ваш код здесь */{}'? – borisbn

0

get_private_var не является конструктором. Это функция, которая вызывается, когда вы делаете object.get_private_var() - это просто типичная функция-член.

Конструктор - это функция, вызываемая при создании объекта (имеет смысл, правильно?). В вашем случае, это будет использоваться, когда вы делаете:

exercise object(2,3); 

Эта строка создает объект с именем exerciseobject и передаются значения от 2 и 3 его конструктору. Похоже, вы хотите присвоить эти значения членам public_var и private_var.

Прежде всего, необходимо объявить конструктор:

class exercise 
{ 
public: 
    exercise(int, int); //declaration: constructor of class exercise 

    int public_var; 
    int get_private_var(); 
private: 
    int private_var; 
}; 

Как вы можете видеть, конструктор объявляется так же, как и любой другой функции члена, за исключением того, что не имеет тип возвращаемого значения. Это имеет смысл, так как тип возврата явно является классом. Здесь я указал два аргумента.

Теперь нам нужно определить конструктор, подобно тому, как вы определили get_private_var, но снова без возвращаемого типа:

exercise::exercise(int x, int y) 
{ 
    public_var = x; 
    private_var = y; 
} 

И затем вы сделали. Этот конструктор просто присваивает значения, которые передаются ему публичным и частным членам.

Однако, есть немного лучший способ реализации этого конструктора, используя список инициализации членов:

exercise::exercise(int x, int y) 
    : public_var(x), private_var(y) 
{ } 
+0

спасибо большое, ребята, я попробую сейчас ваши предложения ^^))) – bionian

0

Вот как вы строите класс с конструктором

class a 
{ 
public: 
int pubvar; 
a() //default constructor 
{ 
pubvar =1; 
privar =2; 
} 
a(int one, int two) //constructor with intializing 
{ 
pubvar = one; 
privar = two; 
} 
private: 
int privar; 
} 

Теперь по умолчанию инициализации

a myclass; 

и инициализировать ваши переменные

a myclass(4,2); 

надежда, что помогает

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