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

  看如下示例:
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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值