C++知识总结
最近,在C++课上接触了很多新的知识,也有了很大的新收获,像运算符重载、组合与继承、虚函数与多态性。
在运算符重载这一章里,我主要学习了重载输入输出运算符,应用如下:
ostream&operator<<(ostream &os,Time&d)//输出运算符
{
os<<d.year<<" ";
os<<d.month<<" ";
os<<d.day<<endl;
return os;
}
istream&operator>>(istream &is,Time&d)//输入运算符
{
is>>d.year>>d.month>>d.day;
return is;
}
在应用的时候要知道在数据类定义private的情况下,要应用友元函数进行重载运算:
friend ostream&operator<<(ostream &os,Time&d);
friend istream&operator>>(istream &is,Time&d);
自增自减运算符都有前缀和后缀形式,前缀形式返回改变后的对象,后缀运算都是返回之前的值,例如:++b会调用Byte::operator++();而b++会调用Byte::operator++();的形式
。
运算符函数的参数和返回类型:1、若只是读参,不该参数值用const引用来传递;2、返回值的类型取决于运算符的具体含义;3、所有赋值运算符均改变左值;4、关系运算符最好返回bool。
将一个对象作为另一个类的成员,被称作组合。如果没有在初始化列表中对成员对象进行显式初始化,编译器会执行成员对象的默认构造函数;成员初始化的次序和成员声明的次序相同,并不考虑它们在初始化列表中的排列顺序。
继承是指在已有类的基础上创建新类的过程。被继承的已有类称为基类;继承得到的新类叫派生类;派生类可以再被继承,这样构成的层次结构为继承层次。
类继承关系的语法形式:class 派生类名:基类名表
{
数据成员和成员函数声明
};
但是派生类无法使用基类的私有成员。若派生类定义了与基类同名的成员,在派生类中访问同名明成员时会屏蔽基类的同名成员。
构造函数的执行顺序:先基类再对象成员最后派生类。基类的构造函数与析构函数不能被继承,如果基类无无参构造函数派生类必须定义构造函数。
继承的应用代码如下:
class Recordn
{
protected:
vector<Record>v;
vector<Record>::iterator itn;
public:
Recordn(){};
};
class Shuju:public Recordn
{
...........
};
虚函数与多态性
多态性是指一个名字,多重含义;或界面相同,多重实现。重载函数是多态性的一种简单形式。
虚函数允许函数调用与函数体的联系在运行时才进行,称动态联编。用关键字virtual的成员函数称为虚函数。一个虚函数在派生类层界面相同的构造函数都保持虚特性。虚函数必须是类的成员函数,虚函数可以是另一个类的友元,析构函数可以是虚函数,但析构函数不能是虚函数。虚函数必须在基类中定义。
纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本,纯虚函数为各派生类提供一个公共界面。声明形式:virtual 类型 函数名 (参数表)=0。
一个具有纯虚函数的基类称为抽象类。