12.19日志

本文详细介绍了C++中的虚函数,包括其在多态中的作用、如何定义及使用,以及虚函数的入口和出口概念。通过示例展示了如何在基类和子类中定义虚函数,并解释了为何在多重继承时需要使用虚拟继承来避免二义性。此外,还提到了纯虚函数及其在创建抽象类中的角色,抽象类不能实例化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚函数总结
虚函数体现了多态,用virtual修饰 例 virtual viod add(int a,int b);
虚函数类型返回值参数必须相同。虚函数就是定义了基类的指针指向子类从而实现函数的多态,从而实现同种函数的不同功能。虚函数相当于一个入口多个出口 基类的虚函数是入口,通过指向子类实现不同的出口;
1:一般的话 虚函数只需在基类定义就行,但为了便于阅读 在子类也重新覆盖定义;
2:定义虚函数指针时不能出现矛盾
如下(可以理解成 用啥定义就在指向子类的里面找定义的部分)

#include
using namespace std;
class base{
public:
virtual void a(){ cout<<“a() in base\n”;}
virtual void b(){ cout<<“b() in base\n”;}
virtual void c(){ cout<<“c() in base\n”;}
virtual void d(){ cout<<“d() in base\n”;}
virtual void e(){ cout<<“e() in base\n”;}
virtual void f(){ cout<<“f() in base\n”;}
};
class A:public base{
public:
virtual void a(){ cout<<“a() in A\n”;}
virtual void b(){ cout<<“b() in A\n”;}
virtual void f(){ cout<<“f() in A\n”;}
};
class B:public base{
public:
virtual void a(){ cout<<“a() in B\n”;}
virtual void b(){ cout<<“b() in B\n”;}
virtual void c(){ cout<<“c() in B\n”;}
};
class C:public A,public B{
public:
virtual void a(){ cout<<“a() in C\n”;}
virtual void d(){ cout<<“d() in C\n”;}
};
int main()
{
C cc;
//base *pa=&cc;//错误 c中有两个基类 用base 来定义的话不知道指向那个
A *pa=&cc;//所以用A 或B 都行
pa->a();
pa->b();
pa->c();
pa->d();
pa->e();
pa->f();
}
如果继承重复可以继承时在重复的地方虚类继承

#include
using namespace std;
class base{
public:
virtual void a(){ cout<<“a() in base\n”;}
virtual void b(){ cout<<“b() in base\n”;}
virtual void c(){ cout<<“c() in base\n”;}
virtual void d(){ cout<<“d() in base\n”;}
virtual void e(){ cout<<“e() in base\n”;}
virtual void f(){ cout<<“f() in base\n”;}
};
class A:virtual public base{
public:
virtual void a(){ cout<<“a() in A\n”;}
virtual void b(){ cout<<“b() in A\n”;}
virtual void f(){ cout<<“f() in A\n”;}
};
class B:virtual public base{
public:
virtual void a(){ cout<<“a() in B\n”;}
virtual void b(){ cout<<“b() in B\n”;}
virtual void c(){ cout<<“c() in B\n”;}
};
class C:public A,public B{
public:
virtual void a(){ cout<<“a() in C\n”;}
virtual void d(){ cout<<“d() in C\n”;}
};
int main()
{
C cc;
base *pa=&cc;/ /virtual 继承的话不子类会有重复的继承

  pa->a();
  pa->b();
  pa->c();
  pa->d();
  pa->e();
  pa->f();

}
3:纯虚数
纯虚数的格式为在这里插入图片描述

在这里插入图片描述
虚函数只起到入口的作用其本身没有功能.

因为其不能实现功能所以基类叫做抽象类,抽象类不能当作对象 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值