本内容以及下面即将讲述的内容都需要您有C语言基础。如果您对C语言一窍不通,建议您先学习C语言,然后再来攻读下面内容。
1,何谓OOP(Object-Oriented Programming,面向对象的程序设计)?
仔细观察一下我们周围的世界,您就会发现:我们周围几乎所有的事物都是由某些实体构成,在面向对象程序设计中,我们把这些实体成为对象(Object)。人、树木、汽车等等都是实体对象。比如:汽车是由引擎、车体、轮胎等对象组成,并且引擎会驱动汽车前进。
现实世界中的这些现象反映在程序设计中,就形成了所谓的OOP(面向对象程序设计)技术。
与以往的过程式程序设计相比,面向对象的程序设计技术能够让程序员在最短的时间内达成所期望的目标(编完代码,完成调试),是迄今为止最理想的程序设计技术。
面向对象程序设计以一种不同于过程式程序设计的新方式来驱动内部数据,程序变量自身就知道如何处理数据。比如:在输出一个变量的值时,并不需要我们主动对其进行输出,而只需要通知变量要将其输出,变量会自动进行输出操作。这种神奇的程序设计技术事实上更接近现实,更贴近我们的思维方式。
2,cout(iostream.h)
printf()是C语言中的输出函数,而cout则是C++语言中的输出对象。
使用cout比printf()更便利。
请看下面一条语句。
cout<< "Hello C++";
这条语言会向界面上输出字符串"Hello C++"。
<<是左移位运算符,正如您所看到的,它也可以使用在输出操作语句中。
我们可以把cout想象为界面或输出设备,上面语句就是把"Hello C++"字符串输出至界面上。
|
界面或其它输出设备
|
<< " Hello C++ "
|
#include<iostream.h>
#include<conio.h>
void main(){
clrscr();
int i=10;
cout<< "Hello C++";
cout<< "\n";
cout<< i;
cout<< "\n";
cout<< "End";
}
#include<iostream.h>
#include<conio.h>
void main(){
clrscr();
int i=65;
float f=1.2345;
double d=-1234.56789;
cout<< "int i is:" << i << "\n";
cout<< "float f is:"<< f << "\n";
cout<< "double d is:"<< d << "\n";
getch();
}
3,cin(iostream.h)
在C++中,cin对象用来取代C语言中的scanf()函数。
像我们可以把cout想象成界面一样,我们同样可以把cin对象想象成键盘,在我们接收键盘输入时使用。
请看下面一条语句。
cin>>a;
这条语句将从键盘接收输入,并将其保存至变量a中。
#include<iostream.h>
#include<conio.h>
void main(){
clrscr();
int a;
cout <<"What is the number: ";
cin >> a;
cout << "\n\nThe number is " << a;
getch();
}
4,cerr(iostream.h)
cerr用于发送错误信息,它不使用缓存,直接把错误信息呈现给用户。
// 除法例题
#include<iostream.h>
#include<conio.h>
void main(){
clrscr();
int a=10;
int b;
cout <<"What is the number: ";
cin >> b;
if (b==0)
cerr << "Wrong number"; // 除数为0,输出错误信息
else
cout << "a / b is " << a/b;
getch();
}
|
独立思考
|
|
|
请自行思考写一个程序,接收语文、英语、数学分数输入,计算三科平均成绩,然后把平均分数输出
|
|
独立思考2
|
|
|
在上面的程序中,添加代码,使之发生错误,并将错误信息输出
|
5,输入格式控制(iomanip.h)
在C++中,把输入输出的数据称之为流(stream),将基于流的操作器称为流操作器(stream manipulators)。
操作器是特殊的流函数,它们可更改输入和输出的格式标记和值。
|
[表] I/O 流操作器
|
|
操作器
|
说明
|
|
dec
hex
oct
endl
ends
flush
setbase(int n)
resetiosflags(long f)
setiosflags(long f)
setfill(int c)
setprecision(int n)
setw(int n)
|
设置基10进制转换
设置基16进制转换
设置基8进制转换
插入换行字符(\n),并清空流
向字符串插入null字符
清空输入流
设定n进制转换
使用格式标记f,清除既定格式
使用格式标记f,设置格式
设定填充字符c
把浮动小数点有效位数设成n
将字段广度设为n
|
|
[表] resetiosflags()与setiosflags()的格式标记值
|
|
格式标记名称
|
说明
|
|
ios::left
ios::right
ios::scientific
ios::fixed
ios::dec
ios::hex
ios::oct
ios::uppercase
ios::showbase
ios::showpos
ios::showpoint
|
在setw() 宽度下,左对齐输出
在setw() 宽度下,右对齐输出
以科学计数法输出
以定点格式显示浮点数值
指定数字输出格式为10进制
指定数字输出格式为16进制
指定数字输出格式为8进制
对十六进制数值显示大写字母A到F,对于科学计数法显示大写字母E
( 0x123->0X123, 2.34e+05->2.34E+05)
输出数值基的前缀字符( 16进制数为0x,8进制数为0 )
对于正数显示+号
对浮点数值显示小数点和尾部的0
|
格式标记符只在resetionflags()与setionflags()两个函数中其作用,其值为常数。关于作用域运算符(::),以后将会讲述。
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
void main(){
int num=220;
clrscr();
cout << "The decimal num is " << num << "\n"; // The decimal num is 220
cout << "The hexadecimal num is " << hex << num << "\n";
// The hexadecimal num is dc
cout << "The octal num is " << setbase(8) << num << "\n";
// The octal num is 334
cout << setbase(10);
cout << 12345 << "\n"; // 12345
cout << setw(20) << 12345 << "\n"; // ' 12345'
cout << setw(20) << setfill('*')<< 12345 << "\n"; // ***************12345
cout << setiosflags(ios::left);
cout << setw(10) << 12345 << "\n"; // 12345*****
cout << setiosflags(ios::hex) << 45 <<"\n"; // 2d
cout << setiosflags(ios::hex | ios::uppercase) << 45 <<"\n"; // 2D
getch();
}
6,输入操作
cin对象忽略空格,如果想强制性输出空格,则要使用cin.get()函数。请看下面get()函数头声明部分。
get(char *string, int length [, char terminator])
在get()函数头声明中,[]部分可以省略。关于函数形式参数的省略内容,请参照函数的重载部分。省略终止符terminator,则\n被认为是默认值。
该函数的作用是:形式参数string能够接收最大长度为length的字符,遇到终止符,自动终止。
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
void main(){
char name[80];
clrscr();
cout << "What is your name? ";
cin.get(name,30);
cout << "your name is :" << name << endl;
getch();
}
get()函数会向输入缓冲区插入换行字符,同时使用两次,会出现问题。请看下面例题。
cout << "What is your name? ";
cin.get(name,30);
cout << "your name is :" << name <<endl ;
cout << "What is your city? ";
cin.get(city,30);
cout << "your city is :" << city << endl;
city参数不会接收任何输入,它不会等待用户的输入而直接退出。原因是:第一次使用get()函数,会自动插入\n字符,当第二次调用get()函数时,它会读取\n字符,因此city=" "。
解决这个问题的方法是使用getline()函数。
|
例题
|
☞
|
使用getline()函数,进行两次读入
|
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
void main(){
char name[80], city[30];
clrscr();
cout << "What is your name? ";
cin.getline(name,80);
cout << "your name is :" << name <<endl ;
cout << "What is your city? ";
cin.getline(city,30);
cout << "your city is :" << city << endl;
getch();
}