c++语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c++继承了c语言高效,简洁,快速和可移植的传统。
c++融合了3种不同的编程方式:
- c语言代表的过程性语言.
- c++在c语言基础上添加的类代表的面向对象语言.
- c++模板支持的泛型编程。
============================================================================================
C语言换行不同的系统不一样,有\n \r\n ;C++中就是endl,代表结束换行。
C++头文件没有.h
1、C++对全局变量的检测增强。
2、函数检测增强 ,参数类型增强,返回值检测增强,函数调用参数检测增强。
3、类型转换检测增强,malloc返回值是void*,指针在C语言中可以强转;在C++中不可以强转。
4、struct 增强,c语言中struct不可以加函数,c++中struct可以加函数,C语言使用时候必须加入struct关键字,C++使用时候可以不加struct关键字。
5、bool类型增强 C语言中没有bool类型。只有真或假 true代表 真(非0) false 代表假(0),bool类型 非0的值 转为 1 ,0就转为0。
6、三目运算符增强
//C语言
void test06()
{
int a = 10;
int b = 20;
printf("ret = %d \n", a > b ? a : b);
//a > b ? a : b = 100; // 20 = 100 C语言返回的是值
//C语言中想模仿C++写
*(a > b ? &a : &b) = 100;
printf("a = %d ,b = %d \n", a, b);
}C++
void test06()
{
int a = 10;
int b = 20;
cout << "ret = " << (a < b ? a : b) << endl;
(a < b ? a : b) = 100; //b = 100 C++中返回的是变量
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}7、 const增强
//C语言
const int m_A = 10; //收到保护,不可以改
void test07()
{
//m_A = 100;
const int m_B = 20; //伪常量
//m_B = 100;
int * p = (int *)&m_B;
*p = 200;
printf("*p = %d , m_B = %d \n", *p, m_B);
//int arr[m_B]; 不可以初始化数组
}结果: *p=200 m_B=200
//C++
const int m_A = 10; //收到保护,不可以改
void test07()
{
const int m_B = 20; //真正常量
//m_B = 100;
int * p = (int *)&m_B;
*p = 200;
cout << "*p = " << *p << endl;
cout << "m_B = " << m_B << endl;
int arr[m_B]; //可以初始化数组
}结果: *p=200 m_B=20
const内部解析图:

C++中const分配内存情况 :
//1、const分配内存 取地址会分配临时内存
//2、extern 编译器也会给const变量分配内存
void test01()
{
const int m_A = 10;
int * p = (int*)&m_A; //会分配临时内存
}
//3、 用普通变量初始化 const 的变量
void test02()
{
int a = 10;
const int b = a; //会分配内存
int * p = (int *) &b;
*p = 1000;
cout << "b = " << b << endl;
}
//4、 自定义数据类型 加const也会分配内存
struct Person
{
string m_Name; //姓名
int m_Age;
};
void test03()
{
const Person p1;
//p1.m_Name = "aaa";
Person * p = (Person*)&p1;
p->m_Name = "德玛西亚";
(*p).m_Age = 18;
cout << "姓名: " << p1.m_Name << " 年龄: " << p1.m_Age << endl;
}
C语言中const是外部链接,C++中const是内部链接。
尽量用const代替#define
在旧版本C中,如果想建立一个常量,必须使用预处理器”
#define MAX 1024;
我们定义的宏MAX从未被编译器看到过,因为在预处理阶段,所有的MAX已经被替换为了1024,于是MAX并没有将其加入到符号表中。但我们使用这个常量获得一个编译错误信息时,可能会带来一些困惑,因为这个信息可能会提到1024,但是并没有提到MAX.如果MAX被定义在一个不是你写的头文件中,你可能并不知道1024代表什么,也许解决这个问题要花费很长时间。
解决办法就是用一个常量替换上面的宏。
const int max= 1024;
const和#define区别总结:
|
8.C语言中没有默认参数,也没有占位参数
笔记不断补充中。。。
版权声明:本文为shijin1996原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。