综合编程

C与C++的差异

微信扫一扫,分享到朋友圈

C与C++的差异
0 0

相对于c语言,c++语言增加的主要特性包括类、重载、派生、虚函数、模板以及异常处理。 但在进一步讨论这些新特性之前,我们需要讨论这两种语言之间的一些小差异。

一、注释

c++语言支持单行注释。单行注释由//开始,在之后的第一个换行符处结束。单行注释比c语言的注释更安全,因为他们不会意外丢掉注释结束的标记,但c语言的注释在c++中任然是合法的。

二、标记与类型名

在c++语言中用于标识特定的结构、联合或枚举的名字会自动被认为是类型名。因此我们将

typedef struct {double re, im;} complex;

简单写成

struct complex  {double re, im;} ;

三、不带参数的函数

在声明和定义一个不带参数的c++函数时,可以不使用void:

void draw(void); //no arguments
void draw();        //no arguments either

四、默认实际参数

c++语言允许函数的实际参数有默认值。例如,下面的函数可以显示任意个数的换行符。如果调用时没有提供任何实际参数函数会显示一个换行符。

void new_line(int n=1)
{
    while (n-- > 0)
        putchar('n');
}

调用new_line函数时,可以提供一个实际参数,也可以不提供实际参数。

new_line(3);  //print 3 blank lines
new_line();    //print 1 blank line by default

五、引用参数

c语言规定实际参数是按值传递的,这使编写那些需要修改作为实际参数提供的变量(除了数组)都非常困难。为了回避这个限制,我们只能传递指向该变量的指针。对于一个将两个变量的内容交换的函数,其C语言的实现大致如下:

void swap(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

当swap函数被调用时,其参数应该是指向变量的指针:

swap(&i, &j);

虽然这种方式可以正常工作,但它使用起来并不方便,代码也不易理解,还容易出错。c++语言在这方面做一些改进,允许实际参数被声明成引用,而不是指针。下面是将a和b声明为引用后swap函数的样子:

void swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

当swap函数被调用时,不需要在实际参数前加&运算符:

swap(i, j);

在swap的函数体中,a和b被分别理解为i和j的别名。语句temp=a确实会将i的值复制到temp中。语句a=b也确实将j的值复制到i中。同样,b=temp将temp的值复制给j。

六、动态存储分配

c程序可以使用函数malloc、calloc、realloc动态分配和释放内存。虽然c++程序仍然可以使用这些函数,但更好的做法是使用new和delete。 new和delete是运算符,不是函数。new用来分配空间,delete用来释放分配的空间。new的操作数是一个类型说明符:

int *int_ptr , *int_array;
int_ptr = new int;
int_array = new int[10];

当无法分配所要求的内存时,new会返回空指针。delete需要用一个指针作为他的操作数:

delete int_ptr;
delete [ ] int_array;
简书
感谢您的支持!

    Galaxy S10又有新色泽:朱砂红

    上一篇

    Positive Publicity Boosts Your Startup's Chance for Success

    下一篇

    您也可能喜欢

    评论已经被关闭。

    插入图片

    热门分类