C++小复习
不知不觉已经到7.17号了呀,还有28天左右就要开学了!!!开学就开始考试了,所以,对于C++这门课也要开始复习了。幸亏老师讲的也不多,重点是类。类的构造方法,拷贝构造,虚函数,纯虚函数等等。对于MFC的知识点较少,只需要知道那几个响应函数就可以了。接下来就开始复习一下吧,顺便来总结一些C++类与Java类的区别。说多了都是泪,快忘完了,先来个HelloWorld程序回想起来。
一:HelloWorld程序
1 |
|
注意:不要忘了写头文件:#include
命名空间:using namespace std;
二:一些基础知识
1.基本数据类型
和java不同的是,C++的基本数据类型有关键字,eg:unsiged int(无符号整型);siged int(有符号整型)。
2.转义字符
\n:换行符
\t:水平制表符
\0:用于字符串结束的标志
3.符号常量
在C++里,符号常量的定义是使用const
在Java中,符号常量的定义是使用final
4.运算符与表达式
主要注意%:
1 |
|
条件运算符不要忘
1 |
|
sizeof()运算符
1 |
|
5.对于一些关于类的基础知识,在练习题中体现
练习题在下面
三:基本知识的使用
1.求阶乘
1 |
|
2.求水仙花个数
1 |
|
四:类的创建
P72:课后题练习:
1.定义一个雇员类(姓名、工龄、薪水)
1 |
|
2.定义一个学生类
1 |
|
3.定义一个人员类Person,并派生出Student和Teacher类
1 |
|
4.定义一个盒子类Box
1 |
|
5.定义Student,子类Graduate
重点:拷贝构造函数的使用
1 |
|
6.重载运算符
重点:运算符的重载
返回类型 operator+运算符(类名 对象名){}
对象调用:R1.operator+运算符(对象名);
1 |
|
8,9.必考题!!虚函数,纯虚函数,抽象类。基类指针指向派生类对象
1 |
|
五:练习题
选择题型

面向对象程序设计的三大特性:封装、继承、多态
1 | 2.关于对象和类的关系,说法正确的是( C )。 |

const:符号常量为了提高函数的可维护性

重载肯定是为了使用更加方便啦

重点哦:C++用常量修饰成员函数时const在括号后面,A
const 修饰类成员函数,其目的是防止成员函数修改被调用对象的值,如果我们不想修改一个调用对象的值,所有的成员函数都应当声明为 const 成员函数。
注意:const 关键字不能与 static 关键字同时使用,因为 static 关键字修饰静态成员函数,静态成员函数不含有 this 指针,即不能实例化,const 成员函数必须具体到某一实例。


必考:构造函数可以没有返回值


答案应该是C:
析构函数一个类只能有一个,析构函数的创建:~类名(){}
析构函数不能有参数

拷贝构造函数的创建:类名(类名 &对象名){}
某个对象的引用名

答案:没有
原因:
this指针是在指向类成员本身,但是友元函数并不在类里面,而是在类外面。
举个例子,有两个类A和B,函数C是这两个类的友元,假如C里面可以有this,那么this到底是类A的成员呢,还是类B的成员呢?
1 | 1.如果类A被说明成类B的友元,则( D )。 |


必考:
友元函数的定义:不是一个类的成员函数,但可以像成员函数一样访问该类的所有成员,包括私有成员和保护成员,这种函数称为友元函数。
对于友元函数的定义:
friend 类型 <函数名> (形参)
一个类的友元函数一般将该类的引用作为函数参数。
友元函数既不对称也不传递,可以出现在private部分也可以出现在public部分,整个类都可以声明为另一个类的友元。

1.静态成员也会考的:必须在类外定义
类外定义也是必考的,如何进行类外定义?
类型 类名::变量名=值;
2.静态成员函数:可以在类内定义,也可以在类外定义

- const 关键字不能与 static 关键字同时使用,因为 static 关键字修饰静态成员函数,静态成员函数不含有 this 指针,即不能实例化,const 成员函数必须具体到某一实例。
- 只有在类的非静态成员函数中才可以使用this指针,其它任何函数都不可以
- 友元函数可以访问该类的所有成员,不管私有、公有的、保护的
- 也可以通过类名调用

答案:B

答案:虚基类主要为了消除二义性问题

纯虚函数重点:定义:virtual void show()=0;
1.含有纯虚函数的类是一个抽象类,一个抽象类一定有纯虚函数
2.抽象类不能实例化
3.抽象类的派生类如果没有实现所有的纯虚函数,那么他的派生类还是一个抽象类
运算符重载重点:
什么是运算符的重载?
运算符与类结合,产生新的含义。
为什么要引入运算符重载?
作用:为了实现类的多态性(多态是指一个函数名有多种含义)
不可重载的运算符列表:
**.**:成员访问运算符
.*, ->*:成员指针访问运算符
**::**:域运算符
sizeof:长度运算符
**?:**:条件运算符
**#**: 预处理符号
答案:C:运算符重载不是创造了新的运算符,而是改造利用。
1 | 1.下列关于虚函数的说明中,正确的是( B )。 |
填空题:
1 | 3. 在C++语言中,惟一的一个三目运算运算符是( ? : ) |
简答题:


大题题型:
1.找错题,运行结果题
运行结果题:
如下题:主要考的是构造函数的调用时间,以及派生类构造函数调用。和析构函数,拷贝构造函数的调用。
1 |
|
<1>在main函数中为下面代码时,输出结果为什么?
1 | int main(){ |
输出结果为
1 | /* |
解析:创建g1对象时首先调用构造函数,创建g2时调用的是拷贝构造函数,然后在对象销毁前调用析构函数。
<2>在main函数中为下面代码时,输出结果为什么?
1 | int main(){ |
输出结果为
1 | /* |
解析:创建c1对象时首先调用基类的CGoods的构造函数,然后调用派生类的CClothes的构造函数,然后再对象c1销毁前首先调用派生类的析构函数,然后调用基类的析构函数。
<3>在main函数中为下面代码时,输出结果为什么?
1 | int main(){ |
输出结果为
1 | /* |
2.超经典列题:
构造、拷贝构造、析构、纯虚函数、抽象类、继承、友元函数、运算符重载都考到了。

1 |
|

1 |
|

1 |
|

1 |
|
普通小题:

1 |
|