初识c++(c++与c语言的区别)
2018-01-08 18:47
225 查看
c语言是面向面向过程的程序设计:数据结构+算法,c语言的目的是高效。
c++是面向对象的程序设计:由现实世界建立软件模型。
c++比c加强的点:
1.引入命名空间
一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间
2.实用性加强
C语言中的变量都必须在作用域开始的位置定义!
C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
例如: for (int i = 0; i < 10; i++)
3.register关键字
register关键字请求“编译器”将局部变量存储于寄存器中
C语言中无法取得register变量地址
在C++中依然支持register关键字
C++编译器有自己的优化方式,不使用register也可能做优化
C++中可以取得register变量的地址
C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
4.变量监测加强
在C语言中重复定义多个全局变量是合法的
这些同名的全局变量最终都会被链接全局数据区的同一个地址空间上
在C语言中只有一个全局作用域
C语言中所有的全局标识符共享同一个作用域
标识符之间可能发生冲突
在C++中不允许定义多个同名的全局变量
5.struct类型加强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
C++中的struct是一个新类型的定义声明
C语言中 struct 定义了一组数据的集合,而不是一种新的数据类型
所以在定义变量的时候需要在前面加上 struct 关键字进行修饰
C++中 struct 定义了一种新的数据类型,可以直接用来定义变量
6.c++中所有变量和函数都必须要有数据类型
c语言:
//1 函数可以没有返回参数类型
f()
{
printf ("hello world\n");
}
//2 函数参数可以没有数据类型
g(i)
{
return i;
}
int main()
{
// 3 没有参数的函数可以接收任意个参数
f(1,2,3,4,5);
g(12,15);
return 0;
}
c++加强:
在C语言中
int f( );表示返回值为int,接受任意参数的函数
int f(void);表示返回值为int的无参函数
在C++中
int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数
C++更加强调类型,任意的程序元素都必须显示指明类型
7.新增bool类型关键字
C++中的布尔类型
C++在C语言的基本类型系统之上增加了bool
C++中的bool可取的值只有true和false
理论上bool只占用一个字节,
如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现
true代表真值,编译器内部用1来表示
false代表非真值,编译器内部用0来表示
bool类型只有true(非0)和false(0)两个值
C++编译器会在赋值时将非0值转换为true,0值转换为false
8.三目运算符的加强
1)C语言返回变量的值 C++语言是返回变量本身
C语言中的三目运算符返回的是变量值,不能作为左值使用
C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方
2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用
(a < b ? 1 : b )= 30;
3)C语言如何支持类似C++的特性呢?
====>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已
c++是面向对象的程序设计:由现实世界建立软件模型。
c++比c加强的点:
1.引入命名空间
一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间
2.实用性加强
C语言中的变量都必须在作用域开始的位置定义!
C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
例如: for (int i = 0; i < 10; i++)
3.register关键字
register关键字请求“编译器”将局部变量存储于寄存器中
C语言中无法取得register变量地址
在C++中依然支持register关键字
C++编译器有自己的优化方式,不使用register也可能做优化
C++中可以取得register变量的地址
C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
4.变量监测加强
在C语言中重复定义多个全局变量是合法的
这些同名的全局变量最终都会被链接全局数据区的同一个地址空间上
在C语言中只有一个全局作用域
C语言中所有的全局标识符共享同一个作用域
标识符之间可能发生冲突
在C++中不允许定义多个同名的全局变量
5.struct类型加强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
C++中的struct是一个新类型的定义声明
C语言中 struct 定义了一组数据的集合,而不是一种新的数据类型
所以在定义变量的时候需要在前面加上 struct 关键字进行修饰
C++中 struct 定义了一种新的数据类型,可以直接用来定义变量
6.c++中所有变量和函数都必须要有数据类型
c语言:
//1 函数可以没有返回参数类型
f()
{
printf ("hello world\n");
}
//2 函数参数可以没有数据类型
g(i)
{
return i;
}
int main()
{
// 3 没有参数的函数可以接收任意个参数
f(1,2,3,4,5);
g(12,15);
return 0;
}
c++加强:
在C语言中
int f( );表示返回值为int,接受任意参数的函数
int f(void);表示返回值为int的无参函数
在C++中
int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数
C++更加强调类型,任意的程序元素都必须显示指明类型
7.新增bool类型关键字
C++中的布尔类型
C++在C语言的基本类型系统之上增加了bool
C++中的bool可取的值只有true和false
理论上bool只占用一个字节,
如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现
true代表真值,编译器内部用1来表示
false代表非真值,编译器内部用0来表示
bool类型只有true(非0)和false(0)两个值
C++编译器会在赋值时将非0值转换为true,0值转换为false
8.三目运算符的加强
1)C语言返回变量的值 C++语言是返回变量本身
C语言中的三目运算符返回的是变量值,不能作为左值使用
C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方
2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用
(a < b ? 1 : b )= 30;
3)C语言如何支持类似C++的特性呢?
====>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已
相关文章推荐
- c++初识,c++与c语言区别。及函数重载,缺省值等等
- 初识C++——C语言与C++的区别
- C++中的const关键定代表什么含义?跟C语言中的const有什么区别
- c语言和c++中值传递、指针传递和引用传递的比较和区别
- C语言和C++中结构体struct区别
- C++和C语言的区别
- 详解C++中的const关键字及与C语言中const的区别
- c++基于c11的新特性以及与c99版本C语言的区别
- C++与C语言的区别
- C++与C语言的区别
- c++ 和c语言库文件区别以及源文件
- C语言学习笔记 (002) - C++中引用和指针的区别(转载)
- C++ c++与C语言的区别(struct类型的加强,函数-变量类型加强,bool类型)
- C++、C语言和JAVA开发的区别
- C语言与C++与JAVA的区别
- C语言和C++的区别与对比
- C语言和C++的区别(完整版)
- C语言中的malloc/free与C++中的new/delete的区别
- c++高级---c语言中关于运算符优先级和运算符集合顺序的理解(*p++和*++p的区别)
- C++与C语言的区别及函数重载