c++第五次作业
重载与多态
重载
C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形参(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。
重载格式,举例:
void show() { cout<<"c++"<<endl; } void show(int a) { cout<<"the anwser is"<<a<<endl; }
如以上对于传递参数的不同会自动调用适合的函数来使用。返回值也能够用来区分重载函数,但是不能只有返回值的类型不同。
运算符重载
重定义或重载大部分 C++ 内置的运算符,以此来使用自定义类型的运算符。
重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
格式举例:
返回值类型 operator运算符(形参)
如下所示代码:
#include <iostream> using namespace std; class point { private: int x; int y; public: point(int a = 1, int b = 1) { x = a; y = b; } point operator++() { this->x++; this->y++; } point operator++(int) { point c; c.x = this->x++; c.y = this->y++; return c; } point operator--() { this->x--; this->y--; } point operator--(int) { point c; c.x = this->x--; c.y = this->y--; return c; } void show() { cout << x << " " << y<<endl; } }; int main() { point a(2,2), b, c; c = a++; a.show(); c.show(); }
其中对于后置的运算符必须在定义时在形参中加入int,但此时int不会定义任何变量所以不算是作为参数。
多态
多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。
C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。
通过virtual来定义虚函数
代码示例
class point { private: int x; int y; public: virtual void show() { cout<<"c++"<<endl; } }
如果show函数中无内容则称该函数为纯虚函数,其函数体有其继承类定义。而具有纯虚函数的类被称为抽象类,其中抽象类无法实例化即形如point a的定义是错误的。