#include<iostream>using namespace std;class A{public:void normal_func(int x){cout<<"base_class normal func int x"<<endl;}virtual void virtual_func(int x){cout<<"base_class virtual_func int x"<<endl;}};class B : public A{public:void normal_func(int x){cout<<"derived_class normal func int x"<<endl;}virtual void virtual_func(int x){cout<<"derived_class virtual_func int x"<<endl;}};int main(int argc, char *argv[]){A a , *p;p=&a;int i=1;char c='d';p->normal_func(i);p->virtual_func(i);B b;p=&b;p->normal_func(c);p->virtual_func(c);b.normal_func(c);b.virtual_func(c);return 0;}/*派生类所有参数为int时:consequence:base_class normal func int xbase_class virtual_func int xbase_class normal func int xderived_class virtual_func int xderived_class normal func int xderived_class virtual_func int x派生类所有参数为char时:consequence:base_class normal func int xbase_class virtual_func int xbase_class normal func int xbase_class virtual_func int xderived_class normal func char xderived_class virtual_func char x*/
2 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
B b;
A* p = & b;
p->func();
分两种情况:
1. 如果func被声明为virtual,则p->func()调用的是B类的func()函数
2. 如果func没有声明为virtual,则p->func()调用的是A类的func()函数
慕田峪4524236
TA贡献1875条经验 获得超5个赞
overload是同一个函数名,根据参数的不同实现不同的功能。例子:
void add(int a, int b){
return a+b;
}
void add(float a, float b){
return a+b;
}
override就是你例子里的重写父类的函数,以实现virtual的功能,基类的指针根据具体带入对象可以调用子类的virtual函数
virtual函数的意义是你用基类的指针去引用子类的对象时,可以调用子类的函数,这点普通函数是不行的。
A* p=new B();
p->normal_func() //将调用基类的定义
p->virtual_func() //将调用子类的定义
至于你的例子里面为什么能带入char类型,我估计是想展示overload的用法,但是代码里面没有写出来
- 2 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消