个人的知识点总结 c++篇(一)

啊啊啊,作为大四马上毕业的一位老狗,即将面临着找工作的压力,回头看看自己学过的知识,好多都忘了,也有好多都是当时就没有学过。为了做一些准备去面试,我就复习+学习一下相关的知识点吧。先从c++开始。let‘s go!

ps:c++相关的题目参考的牛客网的c++面试经典导读。写的根据自己掌握的不足有所侧重。一些我不熟悉的知识点我会写的比较详细。

一、static关键字的作用

1.定义全局静态变量或者函数

那这样静态的变量或函数和非静态的有什么不同呢,就是隐藏。就是说,当一个源文件里定义的全局变量如果非静态的话,其他文件就可以访问到这个变量(通过extern),而静态的变量在外部访问的话,会产生链接错误,编译不会报错。

文件extern.cpp:

#include <iostream>

int a = 5;
static int b = 5;

static void printHelloStatic()
{	std::cout << "hello";}
void printHello()
{	std::cout << "hello";}

 文件main.cpp

#include <iostream>

int main()
{
    // 正常执行
	extern void printHello();
	printHello();

    // 连接错误
	extern void printHelloStatic();
	printHello();

	extern int a;
	extern int b;

	std::cout << a;// 正常执行
	std::cout << b;// 连接错误

}

2.定义局部静态变量

这个就是在函数内部或者成员函数内部的变量了,也储存在静态存储区,通过多次调用该函数,这个变量也只执行一次初始化的语句。

3.静态成员

普通的成员在生成对象实例时,获得相应内存空间。静态成员在类创建时就已经分配好相应的内存。静态成员是相同类之间的共有成员,可以直接通过类名::静态成员来访问。

二、c与c++的区别

设计模式上:c是面向过程的语言 c++是面向对象的语言

语法上:有封装、继承、多态的特性

c++支持范式、如类模板、函数模板

c++有许多类型安全的功能,如强制类型转换

三、c++的四种cast转换

1.const_cast

这个其实我没太搞懂,按照百科的说法,修改类型的const或volatile属性。使用该运算方法可以返回一个指向非常量的指针(或引用)指向b1,就可以通过该指针(或引用)对它的数据成员任意改变。

#include <iostream>
using namespace std;
int main()
{
	const int& a = 5;
	int& b = const_cast<int &>(a);
	b = 10;
	cout << a;// 输出为10

	return 0;
}

大概就是可以改变指向常量的指针或引用的常量值吧。。

2.dymanic_cast

这个是用于基类与派生类之间的相互转换的。当派生类向父类转换,是绝对没有问题的。父类像派生类转换的话,需要父类指针本来就是指向的派生类对象,否则转换结果为空。

还要注意就是dynamic_cast在程序运行时转换,所以必须通过类的虚函数表来判断两个类的继承关系,所以基类中必须有定义的虚函数。

#include <iostream>
using namespace std;

class Base
{
public:
	virtual void f() {};
};

class Child:public Base
{
public:
	void f() { cout << "111"; }
};

int main()
{
	Base* a = new Child();
	// 成功转换
	Child* c = dynamic_cast<Child*>(a);
	c->f();
	delete a;

	// 转换失败
	a = new Base();
	c = dynamic_cast<Child*>(a);
	c->f();// 空指针错误
	delete a;

	return 0;
}

3.static_cast

可以用于基类于派生类的相互转化,基类转化为派生类没有安全性检查。

基本数据类型的相互转化,也没有安全性检查

不同指针类型的转化

任意类型转化为void(并不知道有什么用)

4.reinterpret_cast

啥都可以转,包括int转指针这种的。

使用cast有啥好处:使用这些cast运算符替代c中的强制类型转换,可以更多的进行安全性检查,防止转换发生错误丢失。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值