2021.4.16牛客刷题小结
前言
以下内容为自己学习记录用,仅供参考
C++
1、预处理
1、源文件一行只能有一条预处理命令。
因为预处理命令是#开头的代码行,没有;
,一条独占一行。
2、常用ASCII码
A——65
Z——90
a——97
z——122
0——48
9——57
3、位运算
右移>>:
有符号数右移操作是算术右移操作
最高为根据移动后的最高位(符号为)进行补全。低位移出(舍弃),高位的
空位补符号位,即正数补零,负数补1。
空位补零。
eg:
1000 >> 1 -> 1100
011 >> 1 -> 001
左移<<:
将运算数的二进制整体左移指定位数,低位用0补齐,将一个数左移一位扩大2倍。高位移出(舍弃),低位的空位补零。
eg:
0000 0011<<2 -> 0000 1100
按位与 &
相同位的数字只要有0则位0。
按位或 |
相同位的数字只要有1就为1。
按位异或 ^
相同位的数字数值不同则为1,相同则为0
按位异或作用:判断两个字符串是否相同。
4、重写之 协变:
在C++中,只要原来的返回类型是基类类型的指针或引用,新的返回值类型是派生类的指针或引用,覆盖的方法就可以改变返回类型,这样的返回类型称为协变返回类型。
新的返回类型只能是基类的派生类(自己与兄弟类)
class Father{
public:
virtual Father* p(){
cout<<"Father"<<endl;
return this;
}
};
class Son1: public Father{
};
class Son: public Father{
public:
Son* p()
{
cout<<"Son"<<endl;
return this;//return (dynamic_cast<Son1*>(this));
}
};
int main()
{
Son son;
son.p();
return 0;
}
输出:Son
5、动态/静态联编
静态联编 通过对象名调用虚函数,在编译阶段就能确定调用的是哪一个类的虚函数
动态联编 通过基类指针调用,在编译阶段无法通过语句本身来确定调用哪一个类的虚函数,只有在运行时指向一个对象后,才能确定调用时哪个类的虚函数
6、基类指针
派生类与基类之间的特殊关系之一:基类指针可以在不进行显示类型转换的情况下指向派生类对象;
基类引用可以在不进行显示类型转换的情况下引用派生类对象。
一个指向基类的指针可以访问从基类派生出来的任何对象。
总结
今天没刷几题。
参考:
[1]: 位运算、左移、右移