C++基本语法,入门及提高(5)

来源:互联网 发布:郝斌老师c语言笔记 编辑:程序博客网 时间:2024/05/18 00:12

容易混淆的:
  函数指针—指针函数;数组指针——指针数组;类模板——模板类;函数模板——模板函数

c++包含过程编程,面对对象编程和通用编程(模板);c只有过程编程.

> 有符号和无符号int的区别

int就是signed int,书上写的时候都是用[signed] int表示signed可以省略,int 默认是 signed int 也就是说是有符号整型,最高位是符号位,数据只占31位

unsigned int是无符号整型,最高位也是数据位,数据占满32位

易混淆的

函数指针—指针函数;数组指针——指针数组;类模板——模板类;函数模板——模板函数

> C C++在语法上的区别

C语言和C++语言在语法上面的部分区别 - http://blog.sina.com.cn/s/blog_5da36a790100piz0.html
C和C++是两门不同的语言,在平常使用中经常出现混编的情况,因此,搞清楚C和C++语法的某些差别很重要,使得我们清楚哪些语句是可以写在c文件里,哪些只能写在cpp文件里的。

1,在C++中,民,局部变量可以在一个程序块内在任何地方声明,在C中,局部变量必须在程序块的开始部分,即在所有"操作"语句之前声明,请注意,C99标准中取消了这种限制。例如:在C++中,for语句中可以出现for(int i=0;i<5;i++),即定义i的同时使用它;但在C中不能这样,只能先定义,然后再使用。int i;for(i=0;i<5;i++)。
2,在C中,按如下方式声明的函数没有对函数参数进行任何说明;
    int func();
     也就是说,如果没有在函数后面的括孤内指定任何参数,这在C中就意味着对函数参数未做任何声明,该函数可能有参数,也可能没有参数,然而,在C++中,这样的函数声明意味着该函数没有参数,也就是说,在C++中,下面这两个函数声明具有同样的作用:
    int func();
    int func(void);
    在C++中,参数列表中的void是任选的.许多C++程序员使用它们是为了表明函数没有任何参数的,以便于他人理解程序.但是,从技术上说,void不是必须的。
3,在C++中,所有函数均必须被设计成原型,但这在C中只是一种选择.编程经验表明,在程序中也应该给函数采用原型设计方法。
4,在C与C++之间还存在一个重要而又细微的差别,即字符常数在C中被自动作为整形来处理,但在C++中则不然.
5,在C中,多次声明一个全局变量虽然不可取,但不算错.在C++中,多次声明同一个全局变量会引发错误.
6,在C中,一个标识符可以至少31个有效的组成字符.在C++中,一个标识符的所有组成字符均是有效的.可是,从实用角度看,过长的标识符没有太大的用处,不仅不便于记忆,而且还会增加出现打字错误的可能性.
7,在C中,在程序内部调用main()函数的情形不常见,但这种做法是容许的,在C++中,这种做法是不容许的. 
8,在C中,无法获得register型的地址,在C++中则可以获得这种地址.
9,在C中,如果类型声明语句中没有指定类型名,该类型被假定成int,这种隐式转型在C99与C++中是不允许的.
10,标准C++所定义的新式头部文件,新式C++头部文件不再使用.h扩展名。如:#include <iostream>   #include <cmath>
11,类与结构体的区别:类与结构体是相互关联的
   结构是C的一部分,C++从C中继承了结构,在语法上,类与结构十分相似,在关系上,这两者也很接近,在C++中,结构的作用被拓宽了,进而使结构成为了类的一种替代方法.实际上,类与结构的惟一区别在于:在默认状态下,结构的所有成员均是公有的,而类的所有成员是私有的.除此之外,类与结构是等价的,也就是说,一个结构定义了一个类的类型.
   C++同时包含这两个等价的关键字struct与class基于3个方面的原因.第一,加强结构的能力.在C中,结构提供了一种数据分组方法,因而让结构包含成员函数是一个小小的改进.第二,由于类与结构是相互关联的,所有现有C代码到C++的移植变得更容易.第三,由于类与结构的等价性,提供两个不同的关键字可以使类定义自由发展,为了保持C++与C的兼容性,结构定义必须始终受它的C定义的结束.
   即使在有些地方可以使用结构来代替类,但尽量不要这么做,为了清楚起见,该用类的地方就用class关键字,该用C结构的地方就用struct关键字.
12,类与联合是相互关联的
    联合也可以用来定义类.在C++中,联合包含成员函数,变量以及构造与析构函数.C++联合保留了C联合的全部特征,其中最重要的特征是所有数据元素共享内存的相同地址.与结构类似,联合的成员在默认状态下也是公有的,并且完全兼容于C.与结构一样,C++中的联合声明定义了一种特殊的类,进而意味着保持了类的封装原则.
    C++的联合有几个必须遵守的使用限制.第一,联合不能继承其他任何类型的类.第二,联合不能是基类,不能包含有虚函数成员.静态变量不能是联合的成员.联合不能使用引用成员,而且不能有任何作为成员的重载赋值运算符的对象.第三,如果一个对象包含明确的构造或析构函数,该对象不能成为联合的成员.
    C++有一个叫做匿名联合的特殊联合.匿名联合没有类型名,也不声明任何变量,只是告诉编译程序它的成员变量共享一个内存地址.但是,变量本身无需要使用常规的点运算符语法即可直接引用.
    上述联合的使用限制也适用于匿名联合,但下面这两个限制除外,第一,匿名联合所包含的元素只能是数据,不能包含成员函数,也不能包含私有或受保护元素;第二,全局匿名联合必须声明成静态的.
13,在C++中定义struct,union和enum类型的变量时,关键字struct,union和enum可以省略;在C中不能忽略。
14,在C++中,可以用const类型的整数作为数组的大小,而在C中不可以。
15,在C中,const类型的变量是对外可见的,所以只能出现在源文件中;而在C++中,const类型的变量只有内部可见,所以可以出现在头文件中。例如:在C源文件中通过语句const int i = 2;定义i,因为它是对外可见的,所以在其它的模块中可以通过声明extern const int i;来引用它;而在C++中,因为const类型的变量默认只有内部可见,如果想定义对外部可见的变量,必须用extern修饰,例如用extern const int i = 2;定义变量i,如果是在C++文件中定义一个在C中使用的变量,可以用extern "C" const int x=10;语句。
16,动态开辟内存 C中用malloc 和free,C++中用new和delete或者delete []

17.因为C++中有new关键字,所以可以使用new动态分配数组,这样数组在定义的时候其大小可以根据运行中的数据进行指定,用完后使用delete []删除。而在C中,数组定义的时候必须明确指定其大小。


一些区别:
C:编写C代码,写出来的是C代码。C++:编写C++代码,写出来的是还是C代码。
C:运行时内存错误。C++:看起来像是运行时内存错误。
C:编译器警告你。C++:编译器警告它自己。
C:1天学会,1年掌握。C++:1年学会,-1年掌握。
C:Goto有害。C++:C++可以无害。
C:入门语言。C++:出门语言。
C:面向过程。C++:面向C++。
C:一切皆指针。C++:一切皆编译器。
C:烂代码能轻易编过,也能轻易调过。C++:烂代码不能轻易编过,也不能轻易调过。
C:说精通的可能精通。C++:说精通的肯定不精通。

C语言文件读写操作总结 -http://blog.csdn.net/strongwangjiawei/article/details/7786085/
C文件读写函数介绍(转)- http://blog.csdn.net/bebaas/article/details/5891770
#include "stdio.h"   
#include <stdlib.h>  
int main() {   
    FILE *fp;   
    char ch;  
    if((fp=fopen("E:\\workplace_c\\1.txt","r"))==NULL) {  
        printf("file cannot be opened/n");   
        exit(1);   
    }   
    while((ch=fgetc(fp))!=EOF){
    fputc(ch,stdout);
    }          
    fclose(fp);   
    printf("\n"); 
}   

#include "stdio.h"   
int main() {  
    FILE *fp;   
    char str[128];   
    if((fp=fopen("E:\\workplace_c\\1.txt","r"))==NULL) {  
        printf("cannot open file/n"); 
//exit(1);  
    }   
    while(!feof(fp)) {  
        if(fgets(str,128,fp)!=NULL)  
        printf("%s",str);  
    }  
    fclose(fp);  
}


原创粉丝点击