2012-11-06 31 views
1

对于C++学习的目的,我有文件class1.h,class1.cpp,class2.hclass2.cpp。我想在class2内实例化一个名为class1Obj的对象。在哪里以及如何实例化此对象?我是否在class2构造函数中实例化classObj如何实例化C++类中的对象?

在过去,我创建了一个指向一个班级的指针,该班级在当时运行良好,但我认为指针不是我应该选择的路线,因为classObj只能在class2之内使用。

+0

简单类型的Class1的成员变量添加到等级2。它将在class2对象的构造时间实例化。 –

+0

你可以将它实例化,只需要编写相应的正确代码即可。如果你在构造函数中做,它会更好。如何实例化:Class1实例; – ISTB

+0

你不需要显式的'new'操作符来实例化。所以一个变量就足够了 – madhairsilence

回答

6
class class1 
{ 
    //... 
}; 

class class2 
{ 
    class1 member; 
    //... 
}; 

在class2 ctor中,可以在构造函数初始化列表中初始化member

class2::class2(...) 
: member(...) 
{ 
    //... 
} 
3

那么你是如何创建过去的指针?据推测,你做了这样的事情:

class class2 
{ 
    public: 
    class2() 
    { 
     class1Pointer = new class1(); 
    } 
    // Destructor, copy constructor/assignment, etc... 
    private: 
    class1* class1Pointer; 
}; 

现在你想要做的完全一样的,但是这个时候你不想要一个指针class1,你想要一个class1本身:

class class2 
{ 
    public: 
    class2() {} 
    // Destructor, copy constructor/assignment, etc... 
    private: 
    class1 class1Obj; 
}; 

的对象将在您创建对象class2时默认初始化。如果您的class1构造函数应该使用初始化列表:

class class2 
{ 
    public: 
    class2() : class1Obj(1, 2, 3) {} 
    // Destructor, copy constructor/assignment, etc... 
    private: 
    class1 class1Obj; 
}; 
1

这取决于您的Class1。如果其构造函数接受某些参数,则必须在Class2构造函数或初始化列表中显式初始化它。

Class2 { 
public: 

    class2() { 
     //Here m_class1Obj will be instantiated 
     m_class1Obj = Class1(/*some params*/); 
    } 

private: 
    Class1 m_class1Obj; 
}; 

或者

Class2 { 
public: 

    class2() : m_class1Obj() {} 

private: 
    Class1 m_class1Obj; 
}; 
+2

除了你没有显示初始化,你正在显示任务。 – john

+0

-1不使用构造函数初始化列表。如果M_class1Obj是const,该怎么办?那么你会怎么做? –

+1

建设性评论家。更新。 – besworland

1

实例化一个类的类中:

#include <iostream> 
using namespace std; 



class Foo 
{ 
public: 
    Foo(int i) 
    { 

    } 
}; 

class Bar 
{  
    Foo i; //<--- instantiate a class inside a class ---- 
    public: 

    Bar() : i(1) //<--- instantiate a class inside a class ---- 
    { 

    } 
}; 





int main(void) 
{ 


    Bar b; 




    cout<<" \nPress any key to continue\n"; 
    cin.ignore(); 
    cin.get(); 

    return 0; 
}