您的位置:首页 > 其它

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

2008-02-25 16:58 369 查看
看如下示例:


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;


}



感觉是最合适的写法了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐