reverse反转函数,using 和define

反转string类

 reverse(str.begin(), str.end());

反转数组

reverse(a,a + strlen(a));

做题过程中偷窥同学代码,发现大佬喜欢使用using i64 = long long ;

而小趴菜我喜欢#define ll long long

啥都不懂就乱用,今日了解到define主要用于宏定义,

格式#define 标识符 常量

定义后的代码当中,使用标识符(我爱用的ll)的地方都被替换成常量了,这里的常量可以是字符、字符串、变量、类型、表达式等等。值得注意的是,宏定义定义的标识符是在程序编译之前的预处理阶段进行替换的,也就是说在预处理阶段,已经把程序中所有的标识符全部替换成了常量,因此在程序运行阶段是调试不了该标识符的。可以通过#undef来解宏,就是在解宏后,解宏后面代码中的这个宏定义标识符就失效了。


而using的作用就是给数据类型起别名

格式using 别名 = 类型;

此外using可以在继承体系中,改变部分接口函数的继承权限

当我们在面向对象编程的时候,往往会继承别的类,继承有三种方式,分别是公有继承(public)、私有继承(private)、保护继承(protected)。在这三种继承中,私有继承后,父类的所有成员属性和方法都成为了派生类的私有成员,这会导致派生类实例化的对象是不能访问这些成员属性和方法的,在这个时候,using就起到作用了,使用using就可以将其变成公有成员。
 

class Parents{
    Parents(){}
    ~Parents(){}
public:
    int serven1;
public:
    int Speak(){
    cout<<"I am taking!";    
    }
 
};
 
 
 
class Child(): private Parents{
public:
    using Parents::Speak();
 
}
 
 
 
void main(){
 
    Child Serven2 = new Child();
    Serven2.Speak();                        // 可以调用,因为使用了using,并且在子类中的public        
    Serven2.serven1;                        // 不能调用,因为是私有属性
}

此外补充typedef,与using类似,typedef也是给变量起别名

格式typedef 类型 别名;

typedef和#define的区别:

1. typedef是一个语句,后面要加上分号

2. #define是一个关键字,只是在做标识符的替换

3. typedef是在运行期间进行的,#define是在预编译期间进行的。

4. typedef在语法上是一个存储类的关键字(如auto、extern、mutable、static、register等一样),虽然它并不真正影响对象的存储特性,如:

typedef static int INT2; //不可行

编译将失败,会提示“指定了一个以上的存储类”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值