你要知道的C与C++的区别

简介: 原文:你要知道的C与C++的区别  如果要说C和C++的区别的话,可能可以列出很多方面出来,但是有许多方面的区别是我们学完这两门语言之后就可以 很好的理解和区分的,比如C是面向过程的一门编程语言,C++虽然主要是以C的基础发展起来的一门新语言,但它不是 C的替代品,不是C的升级,C++和C是兄弟关系,它可以很好地进行面向对象的程序设计。
原文: 你要知道的C与C++的区别

  如果要说C和C++的区别的话,可能可以列出很多方面出来,但是有许多方面的区别是我们学完这两门语言之后就可以

很好的理解和区分的,比如C是面向过程的一门编程语言,C++虽然主要是以C的基础发展起来的一门新语言,但它不是

C的替代品,不是C的升级,C++和C是兄弟关系,它可以很好地进行面向对象的程序设计。我要讨论的不是这些比较显

而易见的区别,而是哪些容易被我们所忽略或者混淆的区别。

区别一:重载问题

  我用的比较多的IDE是VC6.0,编写代码时通常就是建立“Win32 Console Application”,现在向工程中添加test.cpp,

在test.cpp中编写代码,代码如下:

 1 #include <stdio.h>
 2 
 3 int Add(int a,int b)
 4 {
 5    return a+b;
 6 }
 7 int Add(int a,int b,int c)
 8 {
 9    return a+b+c;
10 }
11 
12 void main()
13 {
14    Add(1,2);
15    Add(1,2,3);
16    return;
17 }

  程序编译通过,并且能够正常运行。这说明C++程序可以实现重载,重载的条件是:
a.函数名相同,参数的个数不同;

b.函数名相同,参数的个数相同但参数类型不同。

  而在test.c中编写同样的代码,编译时就会出现如下的错误提示:

  所以可以看出C语言是不支持重载,而C++支持重载。

 

区别二:C/C++的void参数

  在C程序中如果在声明函数的时候如果没有任何参数那么需要将参数定义为void以此来限定此函数不可传递任何参数,如果不进行限定让参数表默认为空其意义是可以传递任何参数,这个问题的由来实际上是由于要兼容早期的K&C标准造成的。K&C 在声明函数时参数表为空,也就是说函数声明时的函数原型签名信息不包含参数信息,如果要有明确的定义空参数的行为那么就要自己去处理它。

  我在test01.c中编写c代码,代码如下:

 1 #include <stdio.h>
 2 #include <conio.h>
 3 

3 void SayHello() //是一个可变参数的函数

5 { 6 printf("\nHello World !"); 7 return; 8 } 9 10 void main() 11 { 12 SayHello(1); 13 SayHello(1,2,3); 14 SayHello('a','b'); 15 16 getch(); 17 return; 18 }

  代码编译通过,并且正常运行。可见C语言中的函数定义时不带参数并不代表该函数在调用时不能传参,而是这个函数
将成为一个可变参的函数,调用时可以传递不同个数的参数。如果要限制这个函数不能传参,这需在定义时加void关键字,

void SayHello(void)。

  再在test02.cpp中编写代码,代码与上面的代码完全相同,但是在编译的时候发生了错误:

 可见在C++语言中,不带参数的函数在调用时并不是和C语言一样可以传递不同个数的参数,函数不能传递任何参数,

此时C++中的 void SayHello()或者void SayHello(void)和C中的void SayHello(void)是一样的。

  参考资料http://www.cnblogs.com/thinkingfor/archive/2010/09/14/1825842.html

 

区别三:struct的功能

  我们都知道在C和C++代码中都可以定义结构体struct,然而C语言只能在struct中声明变量(像int类型,char类型),

但是C++语言不仅可在struct中声明变量,同时还可以定义函数,优点类似于类的既可以有成员变量又有方法。

  我在test_struct.cpp中编写的代码如下:

 1 #include <stdio.h>
 2 #include <conio.h>
 3 
 4 struct People
 5 {
 6    char *Name;    //变量
 7    int Age;
 8 
 9   void SayHello(char *name,int age)  //函数体
10   {
11           Name=name;
12           Age=age;
13           printf("\n My name is %s,I am %d years old .",name,age);
14           return;
15    }
16 };
17 
18 void main()
19 {
20     People p1;    
21     p1.SayHello("Mike",18);
22 
23     getch();
24     return;
25 }

 
  程序编译通过,并且成功运行,运行结果:

  

  如果在.c文件中添加以上代码,则在编译的时候就提示出错:“函数不能作为结构体struct的成员”

   所以可以说C++在struct的使用上是对C做了扩展的了。

 

 

附录:如果有重要的区别没有给出,希望大家能够提出,我可以继续完善。

目录
相关文章
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
460 1
|
算法 Java 数据库连接
Java 与 C++ 区别深入剖析及应用实例详解
本文深入剖析了Java和C++两种编程语言的区别,从编译与执行机制、面向对象特性、数据类型与变量、内存管理、异常处理等方面进行对比,并结合游戏开发、企业级应用开发、操作系统与嵌入式开发等实际场景分析其特点。Java以跨平台性强、自动内存管理著称,适合企业级应用;C++则因高性能和对硬件的直接访问能力,在游戏引擎和嵌入式系统中占据优势。开发者可根据项目需求选择合适语言,提升开发效率与软件质量。附面试资料链接:[点此获取](https://pan.quark.cn/s/4459235fee85)。
963 0
|
存储 C++ Cloud Native
云原生部署问题之C++ 中的 nullptr 和 NULL 区别如何解决
云原生部署问题之C++ 中的 nullptr 和 NULL 区别如何解决
275 0
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
521 10
|
存储 编译器 C语言
C++内存管理(区别C语言)深度对比
C++内存管理(区别C语言)深度对比
442 5
|
Web App开发 Rust 分布式计算
Rust与C++的区别及使用问题之对于大量使用C++实现的产品来说,迁移到Rust的问题如何解决
Rust与C++的区别及使用问题之对于大量使用C++实现的产品来说,迁移到Rust的问题如何解决
349 1
|
Rust 安全 编译器
Rust与C++的区别及使用问题之Rust中的bound check对性能产生影响的问题如何解决
Rust与C++的区别及使用问题之Rust中的bound check对性能产生影响的问题如何解决
272 1
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
334 0