C++对C的增强的几点

  1. C++  类和对象 关系???
    1. 对象是对类的实例
    2. 类是对对象的抽象

目录

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封装的区别:

通过接口控制,更加精细化

发布了144 篇原创文章 · 获赞 58 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qqyuanhao163/article/details/100002979