- C++ 类和对象 关系???
- 对象是对类的实例
- 类是对对象的抽象
目录
1. C中可以定义两个全局变量,C++中会报重定义
int a;
int a = 10;
2. 函数的参数个数检测,C 语言可以传多个,eg:需要2个传3个,要求返回整形可以不返回,但是C++必须和定义严格相等
(否则:c++函数参数数量不确定的两种实现方式, https://blog.csdn.net/yang_aq/article/details/90058200)
3.C++要求类型必须强转一下,但 eg:C语言 void * 可以直接赋值给 char *
4.结构体中,C语言不允许加函数,C++可以;C语言中使用时,需要加struct关键字,但是C++不用,可以直接定义类型;
5.C++中,boo类型大小1字节,非0自动转换为1;C中不支持bool
6.C语言中报错,三目运算符返回了一个值 20
C++中,返回的变量,可以赋值给100;如下代码,返回了a<b返回了a,则最后是把a的值赋值为100
C模仿C++的写法,如下代码,将100赋值给b了
7.const 增强,C中局部变量即便声明了const,但是仍可以通过指针绕过改变变量的值,但是c++不可以!
C中:
全局const变量 m_A 不可以修改(全局只读数据区)
局部const变量 m_B 可以通过指针间接修改(绕过编译器)(C中是伪常量,会分配内存,开辟空间)
const是伪常量,无法用于数组的初始化和全局变量的初始化,本质就是限定一个变量不能直接赋值。
一直强调const是伪常量,因为可以间接的去改变它的值。利用指针变量
reference:
https://www.cnblogs.com/loveyouyou616/p/5753232.html
数组大小在编译期确定,const在运行期才确定大小
https://www.cnblogs.com/cplinux/p/5598160.html
https://www.cnblogs.com/witxjp/p/4964840.html
https://blog.csdn.net/it_is_me_a/article/details/90514373
https://blog.csdn.net/LHK000/article/details/21327635
C++的情况,不一样:
全局const变量 m_A 不可以修改(全局只读数据保护区),和C语言一样
局部const变量 m_B 不可以通过指针间接修改,真正意义的const(真正的常量,写入符号表,可以用来初始化数组)
C++中不分配内从,而是存入符号表中
8.C语言中,默认const是外部链接
main.c
test.c
C++中,默认const是内部链接(当前文件才能访问的到,出了作用域就不能用了)
所以,如下代码 extern 声明出去找,找不到了,无法解析。
test.c
解决方法:
定义时,增加 extern ,提高作用域。再次编译,则可以找到C++ a 变量了
C++ const分配内存的几种情况:
C++ const内存分配,只有分配内存了,才可以使用指针修改它的值(验证方法)(绕过编译器)
1. 基础类型,不分配内存,放在符号表中,无法通过取地址修改(仅能修改临时地址里面的值,但是又看不到)
4. 自定义类型,分配了内存,可以通过指针间接修改。(不能直接修改,如注释掉的代码:p1.m_Name = “aaa”)
C++和C封装的区别:
通过接口控制,更加精细化