1.运算符的重载
既重载运算符,让相同的运算符进行不一样的操作(如果你喜欢将小于号重载成大于号都可以),这样就可以直接进行类的赋值或者整体输入输出之类操作。由关键字operator和其后面要定义的运算符共同组成。
将运算符定义为成员函数时,调用成员函数的对象作为运算符的第一个操作数。所以对于一元运算符不需要再提供参数,二元运算符需要再提供一个参数作为右操作数。
当运算重载函数为友元函数时,运算符函数的形式参数的个数要和运算符规定的
运算对象的个数一样。
对输入输出运算符进行重载为:
friend ostream& operator<<(ostream& os,const Book& c)
{os<<c.a<<" “<<c.b<<” “<<c.d<<” "<<c.e<<endl;return os;}
friend istream& operator>>(istream& is,Book& c)
{is>>c.a>>c.b>>c.d>>c.e;return is;}
2.继承
类的继承分为:
(1)公有继承:基类的公有、私有、保护成员皆被继承,但是基类的私有成员仍不可以被访问,public成员则一样可以被派生类访问。(一般使用)
(2)私有继承:基类的公有、私有、保护均可被继承。公有、保护在派生类中被继承为私有,基类的私有仍然不可见。
(3)保护继承:基类公有、保护均被派生类继承为保护类,基类的私有类仍不可见。
3.虚函数
基类成员函数声明语句之前加上virtual关键字使得函数执行动态绑定。语法形式为:
virtual 返回类型 成员函数名(参数表){}
动态绑定只对虚函数起作用,并且只有在使用虚函数的基类地址(基类的指针、引用)时有效。
除了构造函数以外,其他的任意函数都可以是虚函数(包括析构函数)。派生类可以重定义基类虚函数,称为覆盖。
基类中虚函数如果没有被覆盖,那么它在派生类中也一直是虚函数。
为了保持多态性,覆盖基类的虚函数时要用相同的参数表、相同的返回类型、相同的函数名,否则:
1.若参数表不同,则被视为定义了一个同名函数,在派生类中将隐藏基类中的虚函数
2.若返回类型不同,则报告错误。
纯虚函数是一种让所有派生类都引用的函数,具体自己不实现作用.
大一下学期后三章知识点总结
最新推荐文章于 2024-04-05 21:47:32 发布