博主:臭飯飯
幕布(软件):【账号ID】1398637
版权声明:本文为博主原创文章,转载请附上博文链接!
博主文章链接:https://mubu.com/doc/explore/16932(使用的幕布笔记)
C与C++的区别-----臭飯飯
- C 与 C++ 的区别
- 头文件名
- C语言: #include <stdio.h>
- C++: #include <cstdio>
- #include <iostream>
- using namespace std;
- inline 内联函数
C89 与 C99的区别- https://blog.youkuaiyun.com/kekuixiong/article/details/6652254
- 【问题】类的成员方法在类体内定义 和 在类外定义,的区别?
- 类外定义的成员方法,在方法名字前面加类 类型的作用域 类外定义的在调用时,势必有函数调用开销
- 在类体内定义的函数,都自动处理成 inline内联函数
- 函数重载
返回值类型 不管
如果 有多个函数的名字相同(若没有函数重载,最终函数生成的函数符号相同)
但是 形参列表 不同(参数类型不同 或 参数个数不同)- https://blog.youkuaiyun.com/lf_2016/article/details/51769789
- 注意:main函数不能重载,因为程序的入口只能有一个。
- 函数重载仅仅是语法层面的,本质上它们还是不同的函数,占用不同的内存,入口地址也不一样
- const 限定修饰符
C++编译器对 const常量的处理当碰见常量声明时,在符号表中放入常量;
编译过程中若发现使用常量则直接以符号表中的值替换。
编译过程中若发现对 const使用了 extern或者 &操作符,则给对应的常量分配存储空间(为了兼容C)。C++编译器虽然可能为const常量分配空间(进行&运算时候),但不会使用其存储空间中的值。- 【修饰函数】
- 在 c++中,const可以修饰类的成员函数,
- 但在 c 中,不能修饰函数。
- void Time :: fun() const ;
// fun 是 Time类的常成员函数
【注意】可以引用,但不能修改本类中的数据成员
- 【变量】
- C语言:
- const: 常变量(只读变量,具有不可变性)
eg.- const int Max =100;
- //int Array[Max];
【报错】,是常变量 - int*p=&Max ;
- *p=500;
//【正确】可以用过指针间接 访问变量的值
所以是:常变量
- const: 常变量(只读变量,具有不可变性)
- C++:
- const: 常量 编译方式:所有使用常量名字的地方,替换常量的值
与宏定义对比:const常量有数据类型,而宏常量没有数据类型。 - const: 常变量 就看初始值是不是一个立即数 10 20 30
- const int &rx = 2;
//将常量赋给相关类型 - //int &rx = 2;
【错误】 编译出错
- const int &rx = 2;
- const: 常量 编译方式:所有使用常量名字的地方,替换常量的值
- C语言:
- 【修饰函数】
- 头文件名
-
-
-
- & 引用
汇编层面和指针 一模一样- int a = 10;
- int *p = &a;
- int &b = a;
- *p = 20;
- b = 30;
- 【问题】空类(结构体) 的大小?
- C: 不支持空结构体(Windows下)
认为结构体是将相关联的数据打包成一个整体,所以至少有一个变量。- Linux 下 支持空结构体 size = 0
- C++: 1
编译器为每个类(结构体)类型数据至少预留 1 个 byte的空间。- struct 与 class 的区别:
- struct 的成员默认情况下属性是 public 的。
- class 的成员默认情况下属性是 private 的。
- struct 与 class 的区别:
- C: 不支持空结构体(Windows下)
- 参数带默认值的函数 && 初始化列表
C++ 特有- 参数带默认值的函数
- Test ( int a=10, int b=10) : ma(a),mb(b) {}
- 初始化列表
- 参数带默认值的函数
- 动态开辟内存
new/malloc delete/free - C++中定义了4种新式类型转换
为了解决C语言中的旧式类型转换- https://blog.youkuaiyun.com/u014038273/article/details/76147956
- static_cast
- const_cast
- dynamic_cast
- reinterpret_cast
-