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 >> age 和 cout << age 的箭头方向和对应的作用?
- 把 cout 看成屏幕 cin 看成键盘
cout << "hello": 表示把 hello 输出给屏幕cin >> a表示把键盘的值传递给 a
5. C 语言 或 C++ 支持函数重载吗?描述一下什么是函数重载?
- C 语言不支持函数重载;C++ 支持函数重载
- 函数重载:函数名相同、函数个数或者参数类型不相同、(与返回值无关)
6. 为什么 C++ 支持函数重载?
-
采用了
name mangling或者叫name decoration技术 -
C++
编译器默认会对重载函数名进行改编、装饰(注意这是编译器干的事情)
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;
}
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语法