extern 关键字 static关键字 virutal 关键字

本文深入解析C++中的关键字extern、static和virtual的使用场景及功能。extern用于声明外部变量,使变量可在不同文件间共享。static用于定义静态全局变量,限制其作用域仅在声明文件内。virtual支持多态性和虚继承,实现接口的灵活调用。

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

extern

1、声明外部变量

extern 用来修饰变量或者函数名,用以在一个文件中定义,但是可以在其他文件中进行使用的。

例如在A文件中定义了 全局变量 int mm=0;你在另一个文件B中也定 定义了 int mm=0; 编译时时候不会出错,因为编译时以文件为单位作用域在本文件中。但是在链接是后出错,因为他会将多文件进行合并生成obj 全局变量的存储空间合并为一块儿,导致重名;如果加上extern 的话就会链接放行,认为是一个变量。

2、在C++文件中调用C方式编译的函数

C方式编译和C++方式编译相对于C,C++中新增了诸如重载等新特性,编译时候会生成一个由函数名参数组成的中间函数名用来检查重载特性。而C语言编译不会这样。导致C++中如果调用C语言接口会不认识,那么extern ‘C’  就有用了告诉编译器,这段代码用C编译器编译。那么自然而然调用的时候就认识了。

static

1.静态全局变量有以下特点: 
• 该变量在全局数据区分配内存; 
• 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 
• 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的; 

2.

• 静态成员函数不能访问非静态成员函数和非静态数据成员; 
• 由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长; 

virtual

1.多态实现

2.包含一个或多个纯虚拟函数的类被编译器识别为抽象基类。抽象基类不能被实例化,一般用于继承。抽象基类只能作为子对象出现在后续的派生类中

3.虚继承

在多继承下,虚继承就是为了解决菱形继承中,B,C都继承了A,D继承了B,C,那么D关于 A的引用只有一次,而不是 普通继承的 对于A引用了两次……

格式:可以采用public、protected、private三种不同的继承关键字进行修饰,只要确保包含virtual就可以了。

class A
{
  void f1(){};
};
class B : public virtual  A{
  
 void f2(){};
};

class c:public virutal A{

public:

void f3();

};
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值