校招准备系列2-C++进阶

本文深入探讨C++进阶知识,包括手工实现strcpy和strcmp,volatile关键字的作用,mutable和explicit关键字,操作符重载,C++对象内存布局和虚函数机制,继承机制中的对象转换,内存管理,异常机制,以及C++11特性如auto、lambda表达式和智能指针。同时讲解如何限制类对象的分配方式。
摘要由CSDN通过智能技术生成

不调用C/C++ 的字符串库函数,编写strcpy

char * strcpy(char * strDest,const char * strSrc)
{
    if (strDest==NULL||strSrc==NULL)                     
        return NULL;    
    char * strDestCopy=strDest; //make a copy of original char *strDest
    while ((*strDest++=*strSrc++)!='\0'); 
    // *strDest = '\0'; //不需要这一句
    return strDestCopy;
}​

手撕strcmp

https://www.cnblogs.com/jeakeven/p/5855553.html

volatile关键字

volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。简单地说,就是防止编译器对代码的优化。

mutable关键字的作用

mutable定义的数据成员,可以在const成员函数中进行修改。

explicit关键字

explicit关键字的作用就是防止类构造函数(仅有一个实参,它不是默认参数)的隐式自动转换,将参数自动转换为类对象的标识符。

A a=10;
//相当于直接调用A a = A(10);

操作符operator重载

重载的运算符是具有特殊名字的函数:他们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样,重载的运算符也包含返回类型、参数列表及函数体。

重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。一元运算符有一个参数、二元运算符有两个参数。当一个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的(显式)参数数量比运算对象的数量少一个。

对于一个运算符函数来说,要么它是类的成员,要么至少含有一个类类型的参数:

//错误:不能为int重定义内置的运算符
int operator+(int, int);​

这一约定意味着当运算符作用于内置类型的运算对象时,我们无法改变该运算符的含义。

只能重载已有的运算符,不能发明新的运算符号,如operator**。

C++对象的内存布局、C++中的虚函数(表)实现机制

https://blog.twofei.com/496/

vtable是编译器在编译时期为我们创建好的, 只存在一份,存储在static data segment

继承机制中对象之间是如何转换的?

存在继承关系的类型之间的转换规则:
1)从派生类向基类的类型转换只对指针或引用类型有效。
2)基类向派生类不存在隐式类型转换。
3)和任何其他成员一样,派生

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值