2015-11-22 8 views
0

Я изучаю C++ на данный момент, и насколько я знаю, переменные экземпляра должны быть объявлены в файле заголовка. Пример заголовок (.hpp) выглядит следующим образом:C++ Объявить переменную экземпляра в заголовке и конструкторе вызовов в исходном файле

class myClass { 
private: 
    int i; 
    std::ifstream file; 
    anotherClass aClassObj; 
public: 
    //methods 
} 

Я хотел бы инициализировать переменные в моем исходном файле (.cpp). Для int это только:

i = 4; 

Как бы это сделать, например переменные? В Java это было бы variableName = new Classname(ConstructorParam1, ConstructorParam2);

Однако это невозможно в C++, потому что file = new ifstream("filename"); приводит к несоответствию типа, поскольку new <...>; возвращает указатель. Должен ли я делать file.open("filename"); или что-то еще? Как инициализировать мою переменную aClassObj, я хотел бы назвать конструктор с параметрами?

Сердечные приветы

+0

Первое, что нужно начать, это хорошая книга или, по крайней мере, различия между Java и C++. –

+0

В C++ проще вам не нужно предоставлять 'new'. Но вам нужно будет определить определяемый пользователем конструктор, где вы инициализируете переменные-члены. – 101010

ответ

1

Во-первых, вам нужно создать конструктор для вас класс (возможно, несколько перегруженных из них), как вы могли бы сделать в Java. Поскольку C++ основан на значениях, а не на указателях как на Java (в основном, некоторые фундаментальные типы, такие как целые числа, рассматриваются как значения в Java), вам обычно не нужно использовать new в C++, если вы не сталкиваетесь с динамическим полиморфизмом. Конструктор для класса может выглядеть, например, как это (очевидно, он должен быть объявлено в определении класса из myClass):

myClass::myClass(int i, std::string const& name, AParam1 p1, AParam2 p2) 
    : i(i) 
    , file(name.c_str()) // if you use C++11 or later you can omit .c_str()) 
    , aClassObj(p1, p2) { 
} 

Вы не указали, какой тип аргументов конструктора класса anotherClass принимает. В приведенном выше коде предполагается два аргумента типа AParam1 и AParam2. Скорее всего, вам не нужно получать все параметры из параметров конструктора, но они должны быть готовы. Например, вы всегда можете инициализировать член i со значением 0, и в этом случае вам не нужен параметр и просто используйте константу.

Ключевое слово, которое вы хотите найти в своем учебнике по C++, это списки инициализаторов членов: так инициализируются члены на C++.

0

Вместо вызова конструктора с параметрами вы можете инициализировать экземпляр без параметров и затем установить атрибуты объекта. Например, в файле заголовка;

#include "anotherClass.h"  
class Myclass{ 
     public: 
     MyClass(); 
     ~MyClass(); 
     int a; 
     int b; 
     anotherClass aClassObj; 
     }; 

затем в конструкторе файла MyClass.cpp;

Между тем, ваш «anotherClass» имеет этот формат в заголовке;

class anotherClass{ 
    public: 
     anotherClass(); 
     ~anotherClass(); 
     int x; 
     int y; 
     void setParams(int a, int b); 
}; 

и .cpp-файл имеет этот конструктор и метод набора;

anotherClass::anotherClass(){ 
} 
void anotherClass::setParams(int a, int b){ 
    x = a; 
    y = b; 
} 
Смежные вопросы