C++对C语言的非面向对象特性扩充(1)

翻译 2013年11月16日 21:28:35

我将分3篇来介绍C++相对于C在非对象特性上的扩充,今天要讲的是C++在注释,输入输出,局部变量说明的扩充,以及const修饰符与C中的#define的比较。

  1.C++注释除了包括原有C的块注释/*...*/,还提供了行注释//,另外要注意的是对于注释/*...*/的方式是不能嵌套的,比如/*C++/*C++*/C*/,这是不允许的。但是嵌套注释//是可以的。

  2.我想大家对于C的输入Printf和输出Scanf函数应该是在熟悉不过了,在C++中除了可以正常使用这两个函数外,又增加了标准输入流对象cin和标准输出流对象cout。但使用cin和cout进行输入输出更安全,方便。我用VC++写了一下printf和scanf函数,可以正常运行,但会报出警告:

大概的意思是说scanf函数不安全,建议使用scanf_s代替,于是我用了scanf_s,结果警告就没有了!

  再来说说cin对象,它在程序中用于代表标准输入设备,比如键盘,它必须与运算符>>一起运用,即cin>>,而运算符“>>”仍保留了C中“右移”的功能,作为输入功能时,用于从对象cin读取数值传送给右方变量,比如int x;cin>>x;也可以连续输入一连串数据比如cin>>a>>b>>c;它会按顺序提取数据,存入对应变量,数据之间可以用空格、回车分隔。

  但是当输入的是字符串(即类型为char*)时,提取运算符“>>”是会跳过空白,读入后面的非空字符,直到遇到另一个空白字符为止,并在串尾放一个字符串结束标志‘\0’。因此输入字符串遇到空格时,就当作数据输入结束比如:

char* str; cin>>str;

假如从键盘上输入的是C++C++ CC!

则输入后str的值为C++C++,后面的CC!被忽略了。另一种情况是要检查输入数据与变量的匹配情况比如:

int x;float y;

cin>>x>>y;

假如从键盘上输入的是88.88 99.99

那么结果并非是预想的i=88 y=99.99,而是i=88 y=0.88,原因系统是根据变量的类型来分隔输入的数据,对于上述这种情况,系统把小数点前面的部分给了x,把剩下的0.88给了y;

   对于cout对象就不详细说了,和cin差不多,要说的是像double a=3.1415926;cout<<"PI="<<a<<'\n';结果和C#里的字符串相加一样的概念。其中C++中有一个操作符endl,它的作用与'\n'一样;

  3.简单说说C++局部变量,对于用过C#的人,不说也可以,举个例子:一个函数

func()

{

  int x;

  x=1;

  int y;

  y=2;

  ...

}

这个函数在C中是不允许的,在编译时出错,并终止编译,但在C++中是正确的,变量的声明可以和执行语句交替出现,只不过有效作用是有范围限制的,但无论怎么样都要符合“先定义,再使用的原则”;

  4.做一下const修饰符和C中#define的比较,在C中,用#define来定义常量如:#define PI 3.14;程序与编译时标识符PI被全部置换为3.14.在预编译后,程序中不再出现PI这个标识符,PI不是变量,没有类型,不占存储单元,且易出错;而C++则用Const来修饰常量;如:

const double PI=3.14或double const PI=3.14

两者相同,这时PI有类型,占用存储单元,有地址,可以用指针指向它;

const也可以与指针结合使用,看看这两条语句const char* str="c++"和char* const str="c++"有什么区别,一看好像没什么不同,其实他们的意义完全不一样,前一个str是指向字符串常量的普通指针变量,它不允许str指针所指的常量比如:str[2]=‘-';但是可允许改变它所指的地址,比如str="C--";对于第二种情况,则刚好相反,创建了一个常指针,即不能改变指针所指的地址,但可以改变数据,即str="C--"//不可以;str[2]='-';//可以。还有如果const定义的是一个整型常量,那么关键字int可省略;

  5.最后用一段程序来联系总结一下今天的内容(开发工具vs2010,VC++控制台程序):

#include <stdio.h>
#include <iostream>
#define PI 3.14;//C中定义常量
using namespace std;
/*C++在注释,输入输出,
局部变量说明的扩充,以
及const修饰符与C中的
#define的比较*/
int main()
{
	int x;
	float y;
	//C和C++的输入输出的比较
	printf("scanf:请输入一个整数:");
	scanf("%d",&x);
	printf("prinf:所输入的整数:%d\n",x);
	cout<<"cin:请输入一个整数,一个浮点数:";
	cin>>x>>y;
	cout<<"cout:输入的整数:"<<x<<"浮点数:"<<y<<endl;
	//C++中cin的一些注意点
	char*str=new char[20];//局部变量说明
	cout<<"请输入一个字符串:";
	cin>>str;
	cout<<"所输入的字符串:"<<str<<endl;
	
	cout<<"请输入一个整数,一个浮点数:";
	cin>>x>>y;
	cout<<"输入的整数:"<<x<<"浮点数:"<<y<<endl;
	//const的运用
	const double pi=3.14;//或double const pi=3.14
	cout<<"#define:PI"<<PI;
	cout<<"const:pi"<<pi<<endl;
//	
//	//指向字符串常量的普通指针变量和常指针区别
	const char *chr_0=new char[20];//普通指针
	//chr_0[2]='_';不允许
	chr_0="C--";
	cout<<"普通指针:"<<chr_0<<endl;
	char *const chr_1=new char[20];
	
	//chr_1="C--";//不允许
	chr_1[2]='-';
	cout<<"常指针:"<<chr_1<<endl;

	//	delete chr_0;报错,VC++6.0编译器报错
	delete chr_1;
	return 0;
}



C++对C语言的非面向对象特性扩充(2)--函数原型、内联函数、带有默认参数的函数以及函数的重载上和C的区别

函数原型、内联函数、带有默认参数的函数以及函数的重载上和C区别 refer:http://www.cnblogs.com/CaiNiaoZJ/archive/2011/07/02/2096483....

C++对C语言的非面向对象特性扩充(3)--作用域运算符"::"&强制类型转换&运算符new和delete&引用

1.作用域运算符“::”     如果有两个同名变量,一个是全局的,一个是局部的,那么局部的变量在其作用域拥有较高的优先权,全局变量则被屏蔽。     那如果我希望在局部变量的作用域里使用全局变量...

C++对C语言的非面向对象特性扩充(3)

今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(reference);这也是C...

C++对C语言的非面向对象特性扩充(2)

上一篇随笔写了关于C++在注释,输入输出,局部变量说明的扩充,以及const修饰符与C中的#define的比较,也得到了几位学习C++朋友们的帮助讲解,十分感谢,我也希望欢迎有更多学习C++的朋友一起...

C++对C语言的非面向对象特性扩充(3)

今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(reference);这也是C...

35、C++对C语言的非面向对象的扩充

C++对C语言的非面向对象的扩充主要包括   --数据类型的扩充,例如引用类型、无名联合等;   --运算符的扩充,例如范围运算符和自定义运算符等;   --函数的扩充,例如内联函数、重载函数、...

C语言实现C++面向对象语言多态特性

我们知道,C++语言演化过程中,加入了不少新特性,使其成为一门现代高级OO语言。当初C++在上个世纪七十年代末,80年代初时,C++发展刚刚起步,那时C++可以看作C with class,C++编写...

4、Objective-C语言的面向对象特性

概述 Objective-C作为一种面向对象的编程语言,具有面向对象 的基本特征,即:封装、继承和多态。主要介绍Objective-C中有关面向对象基本概念:类、对象、方法和属性等。 Object...

PHP的语言特性-面向对象和C++/java/python的相似之处

1.script 弱类型 可变变量,可变函数 函数式动态语言 引入了协程yield, generator 2.面向对象-C++/java/python 2.1.大多数面向对象的特性都和C++/ja...
  • cajan2
  • cajan2
  • 2015年05月12日 14:34
  • 684
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++对C语言的非面向对象特性扩充(1)
举报原因:
原因补充:

(最多只允许输入30个字)