zoukankan      html  css  js  c++  java
  • c vs c++

    首先极力推荐维基百科的说明http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

    然后,一点说明

    转自网络:

    1--概述

    Difference between c and c++

    C does not have any classes or objects. It is procedure and function driven. There

    is no concept of access through objects and structures are the only place where

    there is a access through a compacted variable. c++ is object oriented.

    C structures have a different behaviour compared to c++ structures. Structures in

    c do not accept functions as their parts.

    C input/output is based on library and the processes are carried out by including

    functions. C++ i/o is made through console commands cin and cout.

    C functions do not support overloading. Operator overloading is a process in which

    the same function has two or more different behaviours based on the data input by

    the user.

    C does not support new or delete commands. The memory operations to free or

    allocate memory in c are carried out by malloc() and free().

    Undeclared functions in c++ are not allowed. The function has to have a prototype

    defined before the main() before use in c++ although in c the functions can be

    declared at the point of use.

    After declaring structures and enumerators in c we cannot declare the variable for

    the structure right after the end of the structure as in c++.

    For an int main() in c++ we may not write a return statement but the return is

    mandatory in c if we are using int main().

    In C++ identifiers are not allowed to contain two or more consecutive underscores

    in   any   position.   C   identifiers   cannot   start   with   two   or   more   consecutive

    underscores, but may contain them in other positions.

    C has a top down approach whereas c++ has a bottom up approach.

    Difference between c and c++ — LearnHub http://compsci.learnhub.com/lesson/page/4155-difference-between-c-and-c

    1 of 2 12/28/2008 6:26 AMIn c a character constant is automatically elevated to an integer whereas in c++

    this is not the case.

    In c declaring the global variable several times is allowed but this is not allowed in c++.

    2--实例篇

    C++

    Differences between C and C++

    (In all the following examples, the first block of code

    is C, and the next block is C++.)Memory allocation

    Use  new  and  delete  instead  of  malloc()  and

    free().

    -----------------------------------------------------------------

    int *a;

    a = (int *)malloc(20*sizeof(int));

    a[19] = 10;

    free(a);

    -----------------------------------------------------------------

    int *a;

    a = new int[20];

    a[19] = 10;

    delete[] a;

    -----------------------------------------------------------------

    These   operators   are   typed,   and   they   also   call

    constructors  as  necessary.    You  should  always  use

    new and delete with objects in C++.Pass by reference

    C++  has  pass-by-reference,  using  the  &  to  mean  the

    same thing var does in Pascal.

    -----------------------------------------------------------------

    void swap( int *a, int *b )

    {

       int t;

       t = *a;

       *a = *b;

       *b = t;

    }

    int x=3, y=4;

    swap( &x, &y );

    -----------------------------------------------------------------

    void swap( int &a, int &b )

    {

       int t;

       t = a;

       a = b;

       b = t;

    }

    int x=3, y=4;

    swap( x, y );

    -----------------------------------------------------------------

    This   means   no   more   using   crazy   pointers   and

    address-of  operators when all you want to do is pass-

    by-reference.Casts

    C++  has  funky  casts  which  you  should  become

    familiar with.

    -----------------------------------------------------------------

    int i;

    i = (int)3.14159;

    -----------------------------------------------------------------

    int i;

    i = static_cast<int>( 3.14159 );

    -----------------------------------------------------------------

    You should use static_cast<>() to do any type

    conversions  among  the  basic  types.    There  are  also

    dynamic, const, and reinterpret casts, which

    we may run into later.Basic I/O, strings, assertions

    C++ has some much nicer I/O libraries, as well as real

    strings.

    -----------------------------------------------------------------

    #include <stdio.h>

    #include <string.h>

    char s[30];

    printf( "Hello world, i is %d and

      %d.", i++, i++ ); /*undefined*/

    strcpy( s, "Bye!" );

    strcat( s, s );     /* bad! */

    printf( "%s\n", s );

    -----------------------------------------------------------------

    #include <iostream.h>

    #include <assert.h>

    #include <cstring.h>

    cout << "Hello world, i is " <<

      i++ << " and " << i++ << "." <<

      endl;         // well defined

    string s="Bye!";

    s += s;         // fine

    cout << s << endl;

    assert( s.length() > 4 );

    -----------------------------------------------------------------cout is used to output stuff to the screen.  The << is

    sometimes called the "put to" operator, it’s the binary

    left-shift  operator  of  C  that’s  been  overloaded  (we’ll

    talk about overloading later) for stream output.  It is a

    nice, typesafe, unambiguous way to send output to the

    screen.  endl is the "end of line" string ("\n" on a

    unix machine, "\r\n" on DOS, etc.).

    strings  work  like  you  expect.    They  are  actually

    part  of  the  standard  class  library--strings  were

    written in C++; they’re not "built in" to the language.

    assert() is a nice macro to assert  that  something

    is true.Booleans

    C++ has booleans.

    -----------------------------------------------------------------

    #include <bool.h>

    bool my_bool = TRUE;

    if( !my_bool )

       do_something();

    -----------------------------------------------------------------

    The only legal values of a boolean variable are TRUE

    and  FALSE.    Of  course,  conditionals  still  accept

    integers, where zero is  false  and  non-zero  is  true,  to

    be backwards compatible with C.

    Comments

    C++ introduces single-line comments with //.

    // This is a single-line comment.Declaration and initialization

    C++ has new rules and syntax about declaration and

    initialization.

    -----------------------------------------------------------------

    int i;

    int j, k=3;

    ...

    j = k;

    for( i=0; i<N; i++ )

       blah();

    -----------------------------------------------------------------

    int k(3);

    ...

    int j(k);

    for( int i(0); i<N; i++ )

       blah();

    -----------------------------------------------------------------

    In C++, you should use the new style, for reasons we

    will   cover   soon   which   involve   constructors   and

    assignment operators.Constants

    For those of you who do stuff like

       #define MAX 20

    quit it.  ANSI C has const, and

       const int MAX=20;

    is preferred (it’s typesafe).  Just a reminder.  const

    has other meanings in C++, which we’ll see later.Templates

    C++ has templates, a way to make functions work for

    many different types of arguments in a typesafe way.

    -----------------------------------------------------------------

    #define MAX(x,y) ((x)>(y)?(x):(y))

    int x=3, y=4;

    int z = MAX( x, y++ );

    printf( "%d\n", y ); /* y==6 !? */

    -----------------------------------------------------------------

    template< class T >

    T max( const T& x, const T& y )

    {

       if( x > y )

          return x;

       return y;

    }

    int x=3, y=4;

    int z=max(x,y++);

    cout << y << endl; // y==5

    -----------------------------------------------------------------More templates

    Here’s a C++ example of using a template to write a

    generic bubble-sort on an array:

    -----------------------------------------------------------------

    template< class T >

    void  bubble_sort(  T*  a,  int  N  )

    // a is array, N is num elements

    {

       for( int i(0); i<N; i++ )

          for( int j(i+1); j<N; j++ )

             if( a[i] > a[j] )

                swap( a[i], a[j] );

    }

    const int N=4;

    int *ia = new int[ N ];

    ia[0] = 1;

    ia[1] = 4;

    ia[2] = 3;

    ia[3] = 2;

    bubble_sort( ia, N );

    for( int i(0); i<N; i++ )

       cout << ia[i] << " ";

    cout << endl;

    -----------------------------------------------------------------

    This  function  works  on  arrays  of  int,  float,

    char,   string—anything   with   operator  >

    defined.  Groovy.

  • 相关阅读:
    MYSQL定时任务 触发器
    mybatis 学习
    SSM 记录
    环境变量配置
    servlet 拦截器 (filter)
    验证码
    jquery $.ajax({});参数详解
    maven打包忽略静态资源解决办法,dispatchServlet拦截静态资源请求的解决办法
    switch..case..
    HDU 1005 题解
  • 原文地址:https://www.cnblogs.com/liujiahi/p/2196343.html
Copyright © 2011-2022 走看看