书面作业_4

更新时间:2024-06-27 05:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

书面作业_4 1、 简答题:

(1) 构造函数的作用是什么? 它有哪些特点? 作用是对对象进行初始化

函数名必须与其类名相同,一个类可以有多个构造函数(即构造函数重载),也可以没有构造函数,构造函数可以有参数,也可以没有参数;在创建对象时,系统会自动调用构造函数

(2) 析构函数的功能是什么? 它有哪些特点? 在对象消亡时,自动完成清除工作。

函数名必须与其类名相同,但该函数前面加~。没有参数,也没有返回值,而且不能重

载,在一个类中只能有一个析构函数。当撤销对象时,编译器会自动调用析构函数。

(3) 拷贝构造函数有什么作用? 在哪些情况下会调用拷贝构造函数? 用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的成员函数。

用类的一个对象去初始化另一个对象;用对象作为函数实参传递给形参时,调用拷贝构造函数;如果函数的返回值是类的对象,函数调用返回时,调用拷贝构造函数。

(4) 类型转换构造函数有什么作用? 它有什么特点? 实现类型的自动转换; 只有一个参数 不是复制构造函数

编译系统会自动调用类型转换构造函数,建立一个临时对象 / 临时变量 (5) 在用new、delete运算符创建、删除对象时,是否会调用构造函数和析构函数?

用new运算符动态创建对象时也会自动调用构造函数;

用delete运算符删除对象时也会自动调用析构函数 。 2、 教材p206第6题

#include using namespace std;

class CSample{ };

int main(){ }

CSample array1[2];

CSample array2[2] = { 6,8 }; CSample array3[2] = { 12 }; CSample *array4 = new CSample[3]; return 0; int x;

CSample(){ cout << \ << endl;} CSample(int n){ }

x = n;

cout << \ << n << endl;

public:

3、 教材p206第7题

#include using namespace std; class Sample{ public:

int v; Sample() { };

Sample(int n) :v(n) { };

Sample(Sample & x) { v = 2 + x.v; }

};

Sample PrintAndDouble(Sample o) { }

int main() { }

Sample a(5); Sample b = a;

Sample c = PrintAndDouble(b); cout << endl; cout << c.v << endl; Sample d; cout << d.v; cout << o.v; o.v = 2 * o.v; return o;

d = a;

4、请按下列要求编写程序:

(1)声明一个教师类Teacher,该类的私有数据成员有:工号(num)、姓名(char *pName)、年龄(age)。请定义相应的成员函数来设置、读取这些私有成员,并为该类定义构造函数、拷贝构造函数、类型转换构造函数(只包含工号一个参数)、析构函数;

(2)在main函数里先定义Teacher类的一个对象wang(201,”王伟”,35),然后以它为基础复制一个对象li,再将li的工号修改为202,姓名修改为“李华”,最后把这两个对象的信息输出到屏幕上。

(提示:姓名是字符指针类型,需要动态分配、释放内存空间,分别在构造函

数、析构函数中实现,还要在拷贝构造函数中分配新内存空间,以达到深拷贝目的。请参考 程序代码4.doc (5) 改进版本)

#include #include using namespace std; class Teacher; class Teacher { public:

virtual~Teacher() {

if (this->name)

delete this->name; this->name = NULL;

Teacher(const Teacher& teacher) { }

this->num = teacher.num; assert(teacher.name);

int len = this->str_len(teacher.name); this->name = new char[len + 1];

this->str_copy(this->name, teacher.name); this->age = teacher.age; }

this->num = num;

int len = this->str_len(name); this->name = new char[len + 1]; str_copy(this->name, name); this->age = age;

Teacher(int num, const char* name, int age) {

assert(num >= 0); assert(name);

assert(age >= 0 && age <= 200);

}

Teacher& operator=(const Teacher& teacher) { }

if (this != &teacher) { }

return *this;

this->num = teacher.num; assert(teacher.name); if (this->name)

delete this->name;

int len = this->str_len(teacher.name); this->name = new char[len + 1];

this->str_copy(this->name, teacher.name); this->age = teacher.age;

public:

int getAge()const

void setName(const char* name) { }

assert(name); if (this->name)

delete this->name; int len = this->str_len(name); this->name = new char[len + 1]; this->str_copy(this->name, name); void setAge(int age) { }

assert(age >= 0 && age <= 200); this->age = age; void setNum(int num) { }

assert(num >= 0); this->num = num;

本文来源:https://www.bwwdw.com/article/x3a3.html

Top