嵌软八股大全7 - C++ 关键字

除了 C 里面常见的一些关键词外,C++ 额外的一些关键词如下所示:

1、变量

1.1、类型

类型 含义 范围 32 位下所占字节 64 位下所占字节
bool 布尔 false / true 1 1
wchar_t 宽字符 - - -
char16_t 16 位字符 - 2 2
char32_t 32 位字符 - 4 4
nullptr 空指针常量 - 4 8

1.2、auto

auto关键字用于让编译器根据变量初始化的值自动推导变量的类型

发生在编译期,而不是运行时

2、面向对象 (OOP)

Object Oriented Programming

2.1、class 类

面向对象的核心概念,类的实例为对象

2.2、访问修饰符

2.2.1、public 公共的

声明类中的公共成员变量/函数

2.2.2、protected 保护的

声明类中的保护成员变量/函数

2.2.3、private 私有的

声明类中的私有成员变量/函数

2.3、virtual 虚

声明虚函数,多态的实现方法之一

2.4、override 重写

显示声明重写,不写该关键字也可以隐式重写虚函数

2.5、final

修饰类拒绝继承该类,修饰虚函数拒绝重写虚函数

2.6、friend 友元

声明普通函数/成员函数/类为友元单位,友元单位可以该类的私有和保护成员

2.7、this

特殊指针,始终指向调用成员函数的对象本身

注意:不能在静态成员函数中使用 this 指针

2.8、mutable 可变的

表示类中的成员变量可以在 const 成员函数中被修改

2、泛型编程

2.1、template 模板

用于编写可以处理不同类型数据的通用代码

2.2、typename 模板参数类型

用于声明模板参数类型

2.3、常见模板

2.3.1、函数模板

#include <iostream>

template <typename T>
T add(T a, T b)
{
	return a + b;
}

int main() {  
	int x = 1, y = 2;  
	double a = 1.1, b = 2.2;  
	
	std::cout << add(x, y) << std::endl;
	std::cout << add(a, b) << std::endl;
	
	return 0;  
}

2.3.2、类模板

#include <iostream>
using namespace std;

// 定义模板类
template <typename T>  
class MyClass {  
public:  
    MyClass(T value) : value(value) {}  
    T getValue() const { return value; }  
    int compare(const T &a, const T &b);
  
private:  
    T value;  
};

// 模板类成员函数
template <typename T>  
int MyClass<T>::compare(const T& a, const T& b)  
{  
    if((a-b)>0)  
        return 1;  
    else if((a-b)<0)  
        return -1;  
    else  
        return 0;  
}


int main() {  
    // 模板类初始化  
    MyClass<int> intObj(5);  
    MyClass<double> doubleObj(5.5);  
    cout << intObj.getValue() << " " << intObj.compare(1,2) << endl;  
    cout << doubleObj.getValue() << " " << doubleObj.compare(3.8,1.6) << endl;  
	
    return 0;  
}

2.4、lamda 匿名函数

3、异常处理

3.1、try 包含异常

try 用于包含可能引发异常的代码

3.2、throw 抛出异常

throw 用于抛出异常

3.3、catch 捕获异常

catch 用于捕获被抛出的异常

3.4、示例

#include <iostream>  
using namespace std;  
  
double division(int a, int b)  
{  
    if(b ** 0)  
    {  
	    // 抛出异常
        throw "Division by zero condition!";  
    }  
    return (a/b);  
}  
  
int main ()  
{  
    try {  
	    // 如果该段代码执行了异常抛出
        cout << division(50, 0) << endl;
	// 会被 catch 捕获到,其参数类型必须和抛出的异常信息严格一致
    }catch (const char* msg) {  
        cerr << msg << endl;  
    }  
  
    return 0;  
}

5、类型转换

5.1、static_cast 静态类型转换

主要实现以下两个功能

  1. 基本类型间的转换
  2. 基类和派生类间的转换

注意以下两点:

  1. 编译时执行静态类型转换
  2. 运行时不会进行类型检查
#include <iostream>  
using namespace std;  
  
class Base{  
public:  
   virtual void show(){ cout << "Base" << endl; }  
};  
  
class Derived : public Base {  
public:  
    voi

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务