快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

使用带参数的对象作为类成员

    C++中如何实现使用带参数的对象作为类的成员呢?今天我们就来为大家解决这个问题,大家请看如下示例:

 class CStudent

...{

public:

CStudent(int age = 16)

...{

       m_age = age;

}

private:

    int m_age;

}

class CClass

...{

lpublic:

       CClass()

...{  
    
}

private:

CStudent m_student1;

CStudent m_student2(10);            // 试图声明一个m_age = 10的成员

                    // 错误error C2059: syntax error:’constant’
 
}


    如上例,要想在类CClass中使用一个带参数的对象m_student2,以上的定义方式是错误的。
 
    语法上说,编译器把这个CStudent m_student2(10);当成了函数声明,报告错误:error C2059: syntax error:’constant’从类定义的角度来看,定义成员变量时并不会实例化该变量,没有内存分配,但是CStudent m_student2(10);这种写法也意味着实例化一个对象,所以是不允许的。那么,这也意味着直接声明一个带参数的成员变量是不可能的,不知道这种理解对不对?
 
    现在的解决的办法:

    1.       定义一个CStudent的指针,在CClass的构造函数中,定义student2,在构造函数中实例化是没有问题的。

 class CClass

...{

public:

    CClass()

...{

    m_pStudent2 = new CStudent(10);   // 实例化

}

       CClass()...{

          delete m_pStudent2;      // ??不知道这里是不是必须delete

                          // 如果不写CClass对象失效后 会自动释放吗?

}

private:

CStudent m_student1;

CStudent m_pStudent2;    //定义指针

}

    2. 在CStudent中加入SetAge()方法,CClass中定义CClass m_student2,然后在CClass的构造函数中调用m_student2.SetAge(10);

 class CStudent

...{

public:

CStudent(int age = 16)

...{

   m_age = age;

}

       void SetAge(int age)

...{

    m_age = age;

}

private:

int m_age;

}

class CClass

...{

public:

    CClass()

...{

    m_student2.SetAge(10); //

}

private:

CStudent m_student1;

CStudent m_student2;         //

}


    不知道是否有更好的解决方法,希望高手指点.

    新求的一中写法

 class       CClass 
 
...{ 

public:   
                CClass():m_student2(10);       // 参数赋值

                ...{   

                }   

private:   

                CStudent       m_student1;  
 
                CStudent       m_student2; 
   
}

    感觉是最合适的写法了。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论