为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
慕姐4208626 2022-07-08 18:07:23
#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()函数

查看完整回答
反对 回复 2022-07-11
?
慕田峪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的用法,但是代码里面没有写出来

查看完整回答
反对 回复 2022-07-11
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信