第十二章 复习题

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) +默认赋值运算符函数

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


你可能感兴趣的:(产品经理学习C++)