可选择的关键字

本文探讨了C++中部分关键字如virtual、static、typename等的使用灵活性,特别是在虚函数重写、内存操作符声明及模板参数指定时,这些关键字的选择性使用不会改变程序的行为。

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

 
从C++语言的视角来看,有一些关键字的使用确实可以选择的。
 
最常见的是在重写基类虚成员函数的派生类成员函数中可选地使用virtual关键字:
Class Shape {
 Public :
       Virtual void draw() const =0;
       Virtual void rotate ( double degree )=0;
       Virtual void invert () =0;
       //…
};
class Blob: public Shape {
 public :
       virtual void draw () const;
       virtual rotate (double );
      void invert () =0;
       //…
};
 
成员函数Blob::draw()重写了基类虚函数draw,因此它也是虚拟的,其中对关键字virtual的使用完全是可选的,使用与否对程序的含义没有任何影响。一个常见的误解是,遗漏使用virtual关键字将回阻止在下级派生类中进一步重些该函数,事实并非如此:
 
 注意,当重写Blob::invert这样的纯虚函数时,virtual关键字同样是可选的,总之,在一个重写的派生类函数中,virtual关键字出现与否完全是可选的,对于程序的含义没有丝毫影响。
 
当声明operatir new ,operator delete, array new以及array delete成员时,static关键字是可选的。因为这些函数是隐式静态的:
 class Handle {
 public :
       void * operator new ( size_t); //隐式静态
       static void operator delete (void *);
       static void * operator new [] (size_t);
       void operator delete [] (void *); //隐式静态
}
 
在一个模板的头部,关键字typename和class可以互换使用,表示一个摸板参数是一个类型名字,在这种上下文环境中,二者含义无任何区别。然而,许多人使用typename 指明该模板实参可以是任何类型,而使用class关键字来指明该类型实参必须是一个类类型:
 
 
C++中,使用register和auto与否对程序的含义也没有任何影响.
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值