C++多态学习(二)完整定义:什么是多态?

多态分为静多态和动多态

1.静多态

函数重载,是一种多态现象,通过命名倾轧在编译阶段决定,故称为静多态。

2.动多态

动多态,不是在编译器阶段决定,而是在运行阶段决定,故称为动多态。动多态形成的条件如下:
1,父类中有虚函数
2,子类override(覆写)父类中的虚函数。
3,将子类对象地址赋给父类的指针,并发生虚函数调用。(如果不用指针,用引用必须一开始必须绑定一个,而且一经确定,引用无法改)

 

3.虚函数

1.声明虚函数的方法

virtual void func();  //声明型关键字

2.override(覆写)

对比之前的重载和shadow

overload重载    同一作用域中,函数名相同,参数列表不同

shadow             发生在父子类中的同名成员

override            发生在父子类中,父类中函数含有 virtual 声明的函数

子类中,同参、同名、同返回的函数,构成覆写

PS:覆写的函数是否一定同父类的访问方式一样(public,private,protected),看子类的需求。

 

例子:

class Shape
{
    public:
        Shape(int xx,int yy)
            :_x(xx),_y(yy) {}
        virtual void draw();
    protected:
        int _x,_y;
};
void Shape::draw()
{
    cout<<"draw from"<<"("<<_x<<","<<_y<<")"<

你可能感兴趣的:(C++多态,C)