C++复习题

  • 格式:doc
  • 大小:59.00 KB
  • 文档页数:8

复习

一、复习提纲:

1. 内存的动态申请与释放

2. 简述面向对象程序设计的思想。其主要特征是什么?

面向对象设计方法的一个重要特点就是“封装性”,指两个方面:一是将有关数据和操作代码封装在一个对象中,形成一个基本的单位,各个对象之间相互独立,互不干扰。二是将对象中的某些部分对外隐蔽,即隐藏其内部细节,只留下少量接口,以便于外界联系,接受外界的信息。传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所以数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。

3. 类的声明和对象的定义

4. 类的成员函数

5. 对象成员的引用

6. 构造函数(作用、特点、参数初始化表、重载、默认参数等)?

构造函数来处理对象的初始化。构造函数不需要用户来调用它,而是在建立对象时自动执行。构造函数的名字必须与类同名,它不具有任何类型,不返回任何值。有关构造函数使用,有以下说明:1)什么时候调用构造函数,在类对象进入其作用域时调用构造函数。2)构造函数没有返回值。3)构造函数不需用户调用,也不能被用户调用。4)在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句。5)如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,没有参数。

重载:在一个类中可以定义多个构造函数,,以便对类对象提供不同的初始化的方法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类型不同。这叫做构造函数的重载。1)在调用构造函数时不必给出实参的构造函数,称为默认构造函数,

2)尽管在一个类中可以包含多个构造函数,但对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数。

默认参数:构造函数中的参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参去默认值。

1)在什么地方指定构造函数的默认值,在生命的地方指定默认值,而不是在第一构造函数时

7. 析构函数的作用和特点?

8. 构造函数和析构函数调用顺序

9. 对象数组、对象指针

10. this指针

11. 常对象、常对象成员(常数据成员、常成员函数)

12. 对象的动态建立和释放

13. 拷贝构造函数的作用?一个类什么时候需要提供拷贝构造函数?试结合例子说明。

14. 静态数据成员和静态成员函数

15. 友元(特点和形式)

16. 类模板

17. 函数模板

18. 运算符重载(重点)

19. 继承与派生,包括派生类的构成、继承的方式(重点)、多级派生

20. 派生类的构造函数和析构函数(简单派生类的构造函数、有子对象的派生类构造函数)

21. 如果类C虚拟继承了类B1和B2,正常继承了类B3,同时还包含类A的对象作为其数据成员,则创建类C的对象时,其构造顺序是怎样的?

22. 多重继承?多重继承的二义性问题。及解决的办法(虚基类)

23. 基类与派生类的转换,即兼容性问题。

24. 多态性的概念。静态性多态和动态性多态。

25. 虚函数

26. 析构函数可以是虚析构函数吗?何时需要声明为虚析构函数?试结合例子说明。

27. 纯虚函数和抽象类

28. 标准输入输出流、文件输入输出流、字符创输入输出流(会最简单的应用)

29. 异常处理的概念。C++处理异常的方法。(会最简单的应用)

30. 命名空间,标准命名空间

二、程序分析题,在每个横线上,首先判断出该行对应的程序是否正确;然后写出原因。

class Student

{

public:

void get_value(){};

void display(){…..}

private:

Int num;

String name;

Char sex;

}

class Student1:private Student

{

public:

void get_value();

void display1(){……}

private:

int age;

}

int main()

{

Student st;

st.num=1001;//错误,在类外不能访问类的私有成员

st.diplay();_________________________________________

Student1 stud1;

stud1.display();_________________________________

stud1.display1();_______________________________

stud1.age=18;_____________________________________

return 1;

}

三、程序改错

参见教材P261第1题

四、程序阅读题

1.参见教材P311第6题

2.参见教材P393第7题

3.参见教材P402例题2

4.写出下面程序的执行结果:

#include

using namespace std;

class Student

{

int num;

char *name;

public:

Student(char *n="no name",int number=1);

Student(Student &s)//拷贝(复制)构造函数

{ cout<<"copy begin!\n";

name=new char[strlen()+1];

strcpy(name,);

num=s.num;

}

~Student()

{

cout<

delete []name;

}

void display()

{

cout<

}

};

Student::Student(char *n,int number)

{

name=new char[strlen(n)+1];

strcpy(name,n); cout<

num=number;

}

int main()

{

Student s1("zhang",1001),s2(s1);

s2.display();

return 0;

}

五、编程题:

1.编写一个人类Person,满足以下要求,并编写相应的测试程序进行验证。

要求如下:

1)数据成员包含:姓名,年龄

2)定义构造函数、析构函数、拷贝构造函数

3) 重载=(赋值运算符)

4)重载<<(插入运算符),重载>>(提取运算符)

#include

#include

using namespace std;

class Person;

istream& operator>>(istream &input,Person& c);

ostream& operator<<(ostream &output,Person& c);

class Person

{private:

string name;

int age;

public:

Person(){}

Person(string m,int n):name(m),age(n){}

Person(Person &a)

{name=;

age=a.age;

}

~Person()

{cout<<"student类"<

}

Person operator=(Person &a)

{name=;

age=a.age;

return *this;

}

friend istream& operator>>(istream &input,Person& c)

{cout<<"输入c中的姓名和年龄:";

input>>;

input>>c.age;

return input;

}

friend ostream& operator<<(ostream &output,Person& c)

{output<<"c中的名字你是:"<<<

output<<"C的年龄为:"<

return output;

}

};

int main()

{Person s1;

cin>>s1;

Person s2(s1);

Person s3("zhang",26);

cout<

cout<

return 0;

}

2. 编写一个日期类Date,满足以下要求,并编写相应的测试程序进行验证。

要求如下:

1)数据成员包含:年,月,日

2)定义构造函数、析构函数、拷贝构造函数

3)重载-(减法)运算

4)重载<<(插入运算符),重载>>(提取运算符)

5)重载=(赋值运算符)

6)重载++(赋值运算符)(前置++,后置++都重载)

7)重载>(大于)

#include

using namespace std;

class Data;

ostream &operator<<(ostream& output,Data&m);

istream &operator>>(istream&input,Data&m);

bool operator>(Data m,Data n);

class Data

{private:

int year;

int month;

int day;

public:

Data(){}

Data(int a,int b,int c):year(a),month(b),day(c){}

Data(Data &m)

{year=m.year;

month=m.month;

day=m.day;

}

~Data()

{cout<<"Data类结束"<