C与C++编程的区别

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区别总结:

  1. const有类型,可进行编译器类型安全检查。#define无类型,不可进行类型检查.
  2. const有作用域,而#define不重视作用域,默认定义处到文件结尾.如果定义在指定作用域下有效的常量,那么#define就不能用。

8.C语言中没有默认参数,也没有占位参数

 

 

 

 

 

 

笔记不断补充中。。。


版权声明:本文为shijin1996原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。