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的方法,这也就是多态,统一接口,不同实现。参考下面的文章,讲的很清晰。。