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.

  • 相关阅读:
    阿里DatatX mysql8往 Elasticsearch 7 插入时间数据 时区引发的问题
    通俗易懂 k8s (3):kubernetes 服务的注册与发现
    ReplicaSet 和 ReplicationController 的区别
    使用Go module导入本地包
    k8s之statefulset控制器
    终于成功部署 Kubernetes HPA 基于 QPS 进行自动伸缩
    Atitit drmmr outline org stat vb u33.docx Atitit drmmr outline org stat v0 taf.docx Atitit drmmr out
    Atitit all diary index va u33 #alldiary.docx Atitit alldiaryindex v1 t717 目录 1. Fix 1 2. Diary deta
    Atitit path query 路径查询语言 数据检索语言 目录 1.1. List map >> spel 1 1.2. Html数据 》》Css选择符 1 1.3. Json 》map》
    Atitit prgrmlan topic--express lan QL query lan表达式语言 目录 1. 通用表达语言(CEL) 1 1.1. 8.2 功能概述 1 1.2. Ongl
  • 原文地址:https://www.cnblogs.com/liujiahi/p/2196343.html
Copyright © 2011-2022 走看看