前言
本次总结接上次总结。看了自考成绩之后,总结的欲望更加的强烈了,用我的总结来应对选择和填空,我相信是小事一桩咯!
重点
1.简单了解函数模板和类模板
template //这里也可以使用 typename 来代替 class
T max(T m1, T m2)
{return(m1>m2)? m1:m2;}
在调用函数模板时,模板的参数是由函数的参数推断出来的。注意第二行前是没有东西的。
template //带参数T的模板说明,可用 typename 代替 class
class TAnyTemp {
T x,y; //类型为T的私有数据对象
public:
TAnyTemp(T X,T Y):x(X),y(Y) { } //构造函数
T getx() { return x;} //内联成员函数,返回类型为T
T gety() { return y;}
2.类是具有唯一标识符的实体,在类中声明的任何成员不能使用extern、auto和register关键字进行修饰,类中定义的数据和函数称为这个类的成员(数据成员和成员函数),如果没有使用关键字,则所有成员默认声明为private权限。
定义成员函数:
返回类型 类名::成员函数名(参数列表)
{
成员函数的函数体 //内部实现
}
不能再类体内给数据成员赋值,下面的方法是错误的:
Class Point {
int x=25,y=56;
}
3.成员函数和数据成员
类的成员函数可以直接使用自己类的私有成员(数据成员和成员函数)
类外面的函数不能直接访问类的私有成员(数据成员和成员函数)
类外面的函数只能通过类的对象使用该类的公有成员函数
4.构造函数
当没有为一个类定义任何构造函数的情况下,C++编译器总要自动建立一个不带参数的构造函数,一旦程序定义了自己的构造函数,系统将不再提供默认的构造函数。(默认也称缺省)
构造函数的特征:
1.名称与类名一样;
2.不能指定返回类型,连void也不行
3.不能被继承
构造函数和new:当使用new建立一个动态对象时,new首先分配足以保存Point类的一个对象所需要的内存,然后自动调用构造函数来初始化这块内存,再返回这个动态对象的地址。
5.复制构造函数(拷贝构造函数)
1.通常情况下,编译器有一个默认的复制构造函数
2.在使用该类的一个对象初始化该类的另一个对象时,调用这个函数
3.使用对象的引用作为形式参数
6.析构函数
1.函数名称与类名一样(为与构造函数区分,在析构函数的前面加上一个“~”号)
2.不能指定返回类型,连void也不行
3.不能指定参数,但是可以显式的说明参数为void,例如A::~A(void)
4.一个类只能定义一个析构函数且不能指明参数
5.在对象的生存期结束时被自动调用
6.不能被继承
析构函数和delete:当使用delete删除一个动态对象时,它首先为这个动态对象调用析构函数,然后再释放这个动态对象占用的内存。
当用delete释放动态对象数组ptr时,使用delete [ ]ptr
使运算符delete知道ptr指向的是动态对象数组,delete将为动态数组的每个对象调用一次析构函数,然后释放ptr指向的内存。
7.默认析构函数
如果定义类时没有定义析构函数,C++编译器会产生一个函数体为空的默认析构函数。
8.this指针
使用this指针,保证了每个对象可以拥有自己的数据成员,但处理这些数据成员的代码可以被所有的对象共享。
C++规定:当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针。
9.对象成员的初始化
在类A中说明对象成员的一般形式如下:
class A {
类名1 成员名1;
类名2 成员名2;
类名n 成员名n;
}
说明对象成员是在类名之后给出对象成员的名字。为初始化对象成员,A类的构造函数要调用这些对象成员所在类的构造函数,A类的构造函数的定义形式如下:
A::A(参数表0):成员1(参数表1),成员2(参数表2),成员n(参数表n){ //其他操作 }
“:”后由逗号隔开的项组成成员初始化列表,其中的参数表给出了为调用相应成员所在类的构造函数时应提供的参数,参数列表中的参数都来自“参数表0”。
对象成员构造函数的调用顺序取决于这些对象成员在类中说明的顺序,与他们在成员初始化列表中给出的顺序无关。
当建立A类的对象时,先调用对象成员的构造函数,初始化对象成员,然后才执行A类的构造函数,初始化A类中的其他成员。析构函数的调用顺序与构造函数正好相反。
总结
这篇里面的大部分我们都简单接触过,但是这一篇是很重要的哦!尤其是最后一点,之后的总结还会涉及到的。