第十二章 复习题

1. 

类成员str是一个指针,因此构造函数必须提供内存来存储字符串。否则str只保存了地址,而没有在堆中指向的内存创建足够的内存并创建字符副本


2. 必须在析构函数中使用delete来在对象使用结束时释放初始化时创建的内存

应该定义复制构造函数

应该定义赋值函数


3. 默认构造函数,如果没有定义构造函数

默认析构函数;复制构造函数;赋值运算符;地址运算符-返回调用对象的地址。

编译器会生成这些函数的定义,默认构造函数和默认析构函数都是空函数,不做任何操作。复制构造函数逐个复制非静态成员,复制的是成员的值,也称为浅复制

赋值运算符函数先使用复制构造函数创建一个临时对象,然后通过赋值将临时对象的值复制到新对象中,也是浅复制


4.

nifty::nifty( )

{

personality = new char [1];

personality[0] = '\0';

talents = 0;

}

nifty::nifty(char *s)

{

personality = new char [strlen(s)+1];

strcpy(personality, s);

talents = 0;

}


另外至少还得有一个析构函数来delete [] personality;


5. 答案不是很确定,高手请指正

a. 

#1 Golfer();

#2 Golfer(const Golfer & g);

#3 Golfer(const char * name, int g = 0);

#4 Golfer();

# 5 默认复制函数

#6 Golfer(const Golfer & g) + 默认赋值运算符函数

#7 默认赋值运算符函数

#8 Golfer(const Golfer & g) +默认赋值运算符函数

应定义复制函数和赋值运算符函数


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值