我想知道的是为什么这个程序的结果是这些?我有点不太好理解。

#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 x
base_class virtual_func int x
base_class normal func int x
derived_class virtual_func int x
derived_class normal func int x
derived_class virtual_func int x

派生类所有参数为char时:consequence:
base_class normal func int x
base_class virtual_func int x
base_class normal func int x
base_class virtual_func int x
derived_class normal func char x
derived_class virtual_func char x
*/

慕姐4208626
浏览 123回答 2
2回答

ABOUTYOU

B b;A* p = & b;p->func();分两种情况:1. 如果func被声明为virtual,则p->func()调用的是B类的func()函数2. 如果func没有声明为virtual,则p->func()调用的是A类的func()函数

慕田峪4524236

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的用法,但是代码里面没有写出来
打开App,查看更多内容
随时随地看视频慕课网APP