C++ Day03 基础语法A cin、cout、函数重载、默认参数、extern "C" 

332 阅读2分钟
1. C++ 代码文件的后缀是什么? C 语言代码文件的后缀是什么?
  • .cpp: C Plus Plus
  • .c
2. C++ 兼容 C语言 的语法吗?
  • 完全兼容,很久以前 C++ 的名字叫做 C with Classes
3. cin 和 cout 中的 c 是什么意思? cin、cout 的使用需要导入哪个头文件?
  • c:是 console 的含义,也就是控制台的意思
  • cin、cout 的使用需要导入 iostream 的头文件
4. 如何理解 cin >> agecout << age 的箭头方向和对应的作用?
  • 把 cout 看成屏幕 cin 看成键盘
  • cout << "hello" : 表示把 hello 输出给屏幕
  • cin >> a 表示把键盘的值传递给 a
5. C 语言C++ 支持函数重载吗?描述一下什么是函数重载?
  • C 语言不支持函数重载;C++ 支持函数重载
  • 函数重载:函数名相同、函数个数或者参数类型不相同、(与返回值无关)
6. 为什么 C++ 支持函数重载?
  • 采用了 name mangling 或者叫 name decoration 技术

  • C++ 编译器默认会对重载函数名进行改编、装饰(注意这是编译器干的事情)

image.png

7. 基于上面的知识,回答为什么说重载不是多态
  • 因为重载会在编译期对函数名进行改写,运行时调用的其实是不同的函数
  • 多态:运行时动态绑定(一种接口多种实现)
8. 默认参数的本质是什么?
  • 本质是 编译器 帮你在调用函数之前把偷偷默认值传递给了函数
  • 下面的代码,在汇编阶段看来完全一致(证明编译器帮你做了传值操作)
void display(int a, int b , int c = 30) {
 cout << "display(int a, int b , int c) "<< a + b + c << endl;
}
int main() {
 display(10, 20);
 display(10, 20, 30);
 return 0;
}

image.png

9. extern 关键的作用?extern "C" 的作用?
  • extern:表示声明变量或函数在其他地方有定义,编译的时候不要报错。
  • extern "C":修饰的代码会按照 C 语言的方式去编译(因为 C++中需要支持函数重载,大概率会把函数名进行 name mangling)。
  • extern "C":主要用于 C 和 C++的相互调用(混编)
10.只包含头文件(.h),而不告诉编译器源文件(.c)在哪里,然后就能正常使用头文件中声明的函数,这是为什么呢?
  • 代码会经历:预处理 → 编译 → 汇编 → 链接 四个阶段
  • 链接阶段 编译器会把我们需要用到的外部函数地址找到(如果找不到就报错了)
  • 这里遗留一些疑惑:动态库或静态库被链接的具体过程?符号表的具体作用?
11. 如何保证调用者,不会重复 include 你提供的头文件(.h)?
  • 使用 #ifndef __MATH_H #define __MATH_H #endif 语法
  • 使用 #pragma once 语法