C++之多态和虚函数
? 多态性是面向对象程序设计的重要特征之一,多态性机制:
? 增加了面向对象软件系统的灵活性
? 减少了冗余信息
? 提高了软件的可重用性和可扩充性
多态性是面向对象的一个重要特征。什么是多态性?
以下为结构化编程中的一个例子:
#include<iostream>using namespace std;class Complex{public:Complex(){real = 0;imag = 0;}Complex(double r,double i){real = r;imag = i;}friend Complex operator+(Complex &c1,Complex &c2);void display();private:double real;double imag;};Complex operator+(Complex &c1,Complex &c2){return Complex(c1.real+c2.real,c1.imag+c2.imag);}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}int main(int argc,char *argv[]){Complex c1(3,4),c2(5,-10),c3;c3 = c1 + c2;cout<<"c1=";c1.display();cout<<"c2=";c2.display();cout<<"c1+c2=";c3.display();return 0;}?将运算符“+”重载为非成员函数后,C++编译系统将程序中的表达式c1+c2解释为:
operator+(c1,c2)
?即执行c1+c2相当于调用以下函数:
Complex operator + (Complex &c1,Complex &c2)
{return Complex(c1.real+c2.real, c1.imag+c2.imag);}
? 为什么把运算符函数作为友元函数呢?
因为运算符函数要访问Complex类对象中的成员。如果运算符函数不是Complex类的友元函数,而是一个普通的函数,它是没有权利访问Complex类的私有成员的。