C++基础之C与C++的联系和不同(二)

来源:互联网 发布:淘宝货款没到 编辑:程序博客网 时间:2024/05/16 15:11

由于C++语言完全兼容C语言,所以在C++中可以用scanf()、printf()等C语言中的输入输出函数进行数据输入输出,但C++也提供了自己特有的输入输出机制。在上一篇博客中,我提到了命名空间,C++中有一个标准命名空间std,这个命名空间在很多头文件中都被定义,在其中,有标准输入、标准输出的类对象cin、cout。

cout是标准输出,如下面这句:

cout << "hello!" << endl;

<<是左移操作符,在这里被重载,功能是表示数据的流向,数据会从右边流向左边,这就实现了一个向屏幕打印的功能,endl表示换行。cout << 支持连续操作,如:

cout << "hello!" << "world!" << endl;

cin是标准输入,如下面这句:

cin >> a;

>>也被重载,这里表示数据从左向右,实现了从键盘获取数据。

cout、cin等控制台输入输出对象必须放在最左边,如:12 >> cout;就是不对的。cout和cin可以输出输入所有基本类型的数据,在内部检测到什么类型就输出什么类型的数据。如下:

int a;double b;char c;cin >> a >> b >> c;cout << "a = " << a << ",b = " << b << ",c = " << c << endl;

上面这些直接使用cout、cin和endl的情况是只有在前面声明了这句:using namespace std,不过并不建议在程序开头使用这句,如果真的要使用,可以在函数开头使用。在没有声明的情况下,要这样使用:std::cout、std::cin、std::endl。


接下来要谈到C++和C语言的一些不同之处(部分):

1、实用性加强了。

C语言中,变量必须定义在函数开始前(有一些编译器并没有严格的检测,如我在红帽系统下使用GCC编译器时,变量定义在函数中间是可以编译通过的),这样并不利于维护,代码的可读性也不好。在C++中变量可以在任意位置定义,比如在使用for循环时,可以这样写for(int i = 0;i < 0;i++)。所以,在编程时,建议延后定义变量,什么时候用,什么时候定义。

2、一些关键字的作用(如resgister)

在C语言中,register修饰变量,将变量定义为寄存器变量,由于变量的值不存在内存中而是寄存器中,所以不可取地址,不可以用指针指向变量。但在C++中,如果对一个寄存器变量进行取地址操作,编译是会通过的,但该变量将变为普通变量,不再是寄存器变量了,会在内存中开辟一个空间存这个变量。由于这个步骤发生在编译阶段,所以我们一般不这么干,因为这样register就失效了。

3、变量的检测加强。

C语言检测不出全局变量的重定义,而C++可以检测出全局变量重定义,不支持这种定义。

4、结构体

C语言不认为结构体是一种新的变量类型,只是一种数据集合,所以定义时要指定struct,如:

struct A{int a;char b;};int main(){struct A st;return 0;}

C++认为结构体是一种新的变量类型,可以直接用来定义变量(共用体也是这样)。在C++中结构体中可以放函数,但函数不参与结构体大小计算。如:

struct A{int a;char b;void Print(){printf("hello\n");}};int main(){A st;printf("sizeof(A) = %d\n",sizeof(A));st.Print();return 0;}



原创粉丝点击