#include <stdio.h>
#include <iostream>
#include <string>
using
namespace
std;
class
base {
public
:
virtual
void
print() {
cout<<
"it is in base::print"
<<endl;
}
virtual
~base(){}
};
class
son:
public
base {
public
:
virtual
void
print() {
cout<<
"it is in son::print"
<<endl;
}
virtual
~son(){}
};
class
grandson:
public
son {
public
:
virtual
void
print() {
cout<<
"it is in grandson::print"
<<endl;
}
virtual
~grandson(){}
};
void
fun(base arge) {
//基类对print()的调用
arge.print();
}
void
func(base& arge) {
//静态多态
arge.print();
}
void
func_t(base* arge){
//动态多态
arge->print();
}
int
main() {
base a;
son b;
grandson c;
func_t(&a);
func_t(&b);
func_t(&c);
base d;
son e;
grandson f;
func(d);
func(e);
func(f);
return
0;
}
要实现多态(动态绑定),必须满足以下之一
1、使用指针调用
2、使用引用调用
1、使用指针调用
2、使用引用调用
对多态的使用。
建立一个父类的
对象,它的内容可以是这个父类的,也可以是它的子类的,
当子类拥有和父类同样的
函数,当使用这个对象调用这个函数的时候,
定义这个对象的类(也就是父类)里的同名函数将被调用,
当在父类里的这个函数前加virtual
关键字,那么子类的同名函数将被调用。