我现在学习C ++,据我所知,实例变量应该在Header文件中声明。示例标题(.hpp)如下所示:
class myClass {
private:
int i;
std::ifstream file;
anotherClass aClassObj;
public:
//methods
}
我想在源文件(.cpp)中初始化变量。仅限于它:
i = 4;
我如何为实例变量做到这一点?在Java中,它将是variableName = new Classname(ConstructorParam1, ConstructorParam2);
然而,这在C ++中是不可能的,因为file = new ifstream("filename");
导致类型不匹配,因为new <...>;
返回指针。
我应该改为file.open("filename");
还是其他什么?
如何初始化变量aClassObj
,我想调用带参数的构造函数?
亲切的问候
答案 0 :(得分:1)
首先,你需要像在Java中那样为你的类(可能是多个重载的)创建构造函数。由于C ++基于值而不是指针作为Java(大多数情况下;某些基本类型如整数在Java中被视为值),因此通常不需要在C ++中使用new
,除非您对动态有所了解多态性。你的类的构造函数可以看起来像这样(显然,它需要在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 ++初始化成员的方式。
答案 1 :(得分:0)
您可以使用无参数初始化实例,而不是使用参数调用构造函数,然后设置对象的属性。例如,在头文件中;
#include "anotherClass.h"
class Myclass{
public:
MyClass();
~MyClass();
int a;
int b;
anotherClass aClassObj;
};
然后在MyClass.cpp文件的构造函数中;
MyClass::MyClass(){
aClassObj.setParams(a, b);
}
同时,你的“anotherClass”在标题中有这种格式;
class anotherClass{
public:
anotherClass();
~anotherClass();
int x;
int y;
void setParams(int a, int b);
};
并且.cpp文件具有此构造函数和set方法;
anotherClass::anotherClass(){
}
void anotherClass::setParams(int a, int b){
x = a;
y = b;
}