C++对C语言的加强

1、对strcut关键字的加强,在C语言中
  
  
struct Teacher
{
int age;
char name[64];
};
定义一个Teacher,必须写成struct Teacher t1;
而C++中则可以直接写Teacher t1;
在C++中的结构体内可以直接定义函数,也可以定义访问权限
类其实就是结构的数据成员加可执行代码,统一提供封装,继承,多态。

在类内部,没有权限限定符,默认是private

在结构内部,没有权限限定符,默认是public

2、三目运算符的增强:C语言中?:结果不能写在左值上,因为返回的一个数值,一个结果。
C++中 的?:对C语言进行了增强,返回的变量本身,所以C++中的三目运算符,可以用在程序的任何地方。
如何让C语言中的三目运算符写在左值上?            
            *(a<b?&a:&b)=30;

3、const 变量的增强
C语言中的const修饰的变量,编译器会为其分配内存空间,因此可以使用指针取地址赋值的方式,对变量的值进行修改。C语言中的const变量是一个冒牌货。

注意此时在C语言中被const以后是一个只读变量,而不是常量,所以不能做数组的下标;
只有常量才能做数组的下标。
而在C++中,const修饰的是一个常量,所以可以作为数组下标。

C++中当检测到const修饰的变量以后,会直接以名值对的方式,存在符号表里面。不能修改。
只有当对变量去地址时或者是全局变量,并且用extern修饰时,编译器为该变量分配内存。
  
  
int a=10;
int b=20;
arr[a+b];
//这种语法现象在C语言和C++里面都是错误的
//而在Linux内核里面是可以的,因为他的gcc编译器是支持的
   
   
#include <iostream>
using namespace std;
 
void main()
{
const int a = 5;
int *p = (int *)&a;//
*p = 4;//修改的是重新分配的地址内的值内部
cout << a << endl;//5
cout << *p << endl;//4
system("pause");
}

变量不能做数组下标
C语言中const修饰的是只读变量,C++修饰中const修饰的是常量

const和#define的区别
#define完成在预编译阶段,是机械的替换,
const完成在编译阶段,有类型和生命周期的检查。
即在一个函数里面定义的#define变量在其他函数里面也可以用,而const却不行。
  
  
void fun1()
{
#define a 10
const int b=10;
#undef a //不想其他程序里面的a,替换成这个程序里面定义的10,此处将a卸载。
//或者将该函数定义的#define 全部卸载
#undef
}










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值