函数定义是子类指针,传入的是父类指针

1.父类,子类都是基础的类,func(parent* xx)函数不论传入的是parent* 指针,还是child*指针,都会调用parent的test()方法。即打印11111,例子如下。

#include <iostream>
#include "stdio.h"
class parent {
public:
    void test() {
        printf("11111\r\n");
    }
};
class child : public parent {
public:
    void test() {
        printf("22222\r\n");
    }
};

void func(parent* xx) {
    xx->test();
};

int main() {
    parent* pa = new parent();
    child* ch = new child();
    func(pa);  //
    func(ch);
    printf("33333\r\n");
}

2.当父类是virtual函数,func(parent* xx)函数传入的是parent* 指针,则会打印11111

传入的是child*指针,则会打印22222。例子如下。

#include <iostream>
#include "stdio.h"
class parent {
public:
    virtual void test() {
        printf("11111\r\n");
    }
};
class child : public parent {
public:
    void test() {
        printf("22222\r\n");
    }
};

void func(parent* xx) {
    xx->test();
};

int main() {
    parent* pa = new parent();
    child* ch = new child();
    func(pa);  //
    func(ch);
    printf("33333\r\n");
}

第二种情况我不理解的点在于:func()函数定义的形参是parent*,为什么可以传入child*类型的参数。原因就是多态,不管是parent*.还是child*,都可以去调用test()方法,据我的理解,传入parent*其实就是调用父类的这个方法,而传入child*由于这个方法被ch给复写了,所以他会调用child的方法,这也就是多态,统一接口,不同实现。参考下面的文章,讲的很清晰。。

C++之多态性_studyhardi的博客-CSDN博客_c++多态性

猜你喜欢

转载自blog.csdn.net/m0_37844072/article/details/120299879