- 一 c++的特点与oo思想
- 1 c++特点
- 1.1 封装
- 1.2 抽象
- 1.3 继承
- 1.4 多态
- 1.5 cout介绍
- 1.6 using namespace std;
- <<符号
- 2 思考 & cout对象的多个方法
- 3.1 cin.ignore()&cin.getline()
- 3.2 cin.get()&cin.peek()
- 3.3 cin.gcout() & cin.read()
- 3 cout对象的多个方法
- 3.1 cout.precision()//精度控制
- 3.2 cout.width()& cin.width()
- c++有个绝对的优势,就是针对不同的的对象去做实例化,这就是所谓的oo思想
- 【根本思想】在面对对象的思想中,任何复杂的事物都可以被看作一个对象。一个在复杂的结构都是由千千万万个对象组成的。
- 他们彼此之间互相联系、组合、最终形成了一个对象。而对于对象,抽象起来最终可以分为两个要素:属性和行为。
- 在面对对象编程中,程序员不在面对一个个函数和变量,而是要放眼大局,面对一个个对象来看待问题。
- 每个对象都是一个完整的独立的个体,它是由相关的属性和行为组合,与外界分隔。
- 例如:一家跨国公司,它在全球有很多分公司,每个分公司都有自己的员工和一套自己的运行体系。对于总公司来说,分公司好比“黑箱”,总公司不需要干预分公司如何调配人员工作等,只需下达命令和指标。
- 封装意味着把对象的属性和方法结合成一个独立的系统单元,并尽可能隐藏对象的内部细节。
- 封装是面向对象思想描述的基础,从此程序员面对的不再是许多复杂的函数和过程实现,而是少数具有行为能力的个体实例。
- 抽象的过程是对具体问题进行概括的过程,是对一类公共问题进行统一描述的过程。为了使某些必要的信息得以顺利的交流,设计者必须制定一个抽象,就如同一个协议,一个得到所有参与活动的有效个体支持的协议。
- 子类对象拥有与其基类相同的全部属性和方法,称为继承。
- 多态是指在基类中定义的属性和行为被子类继承后,可以具有不同的数据类型或者表现行为等属性。
- cout是一个输出流对象,它是“console out(控制台输出)”的缩写。
- 属于basic_ostream类中的对象。
- ostream类在头文件中定义。
using namespace std;
- 这条指令带给我们一个全新的概念:名字空间。
- 就是c++标准库所使用的所有标识符【类、函数、对象等的名称】都是在同一个特殊的名字空间【std】中来定义的。
- 如果我们没有使用这条指令,我们将需要使用std::cout这样的语法来调用输出流对象。
它体现了c++的另一个特点:支持重载。
重载事实上就是允许我们按照不同的方式使用同一个 *** 作符。
#include
using namespace std;
int main()
{
int sum = 0;
cout << "输入一串整数和任意数目的空格:";
int i;
while (cin >> i)
{
sum += i;
while (cin.peek() == ' ')//peek的意思是偷窥。在这里意思是只是识别到字符,但是并不把字符从流中拿走
{
cin.get();
}
if (cin.peek() == '\n')
break;
}
cout << "结果是:" << sum << endl;
return 0;
}
/*
用法一:cin.get(字符变量名)可以用来接收字符
用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.
cin.peek() 其返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。
其功能是从输入流中读取一个字符 但该字符并未从输入流中删除
*/
注意:
- 该程序使用了流对象cin。
- 这个对象的类型是istream,它知道如何从用户终端读取数据。
- cin>>i; cin输入 *** 作符又称为提取 *** 作符,它一次从输入流对象cin提取一个整数。
- 当用户进行键盘输入时,对应的字符将输入到 *** 作系统的缓冲区中。
- 这样,但用户点击键盘上的“enter”键时, *** 作系统把键盘缓冲区的内容传输到cin流的内部缓冲区,“>>” *** 作符随后从这个缓冲区提取需要的信息。
- 如果用户不进行键盘的输入程序将会阻塞。这就是阻塞性【blocking】 io的例子。最初定义为右移 *** 作符,它在C中进行了重载。当他按照这里所示的方法使用时。它就用于从输入流对象提取信息。
- 另外这个 *** 作符对所有内建的数据类型都进行重载,所以它可以从输入流对象提取出int,float,double型数据,也可以提取字符串等数据。
- 在while(cin>>i)中,表达式cin>>i返回输入流对象本身,也就是cin。但是,如果达到了文件尾或者提取 *** 作符遇到了一个非法值,这个返回值将是false。
- 注意,在while(cin>i)中·当用户在键盘上点击enter键的时候,在这一句并不会结束另外。
- 观察两个程序,我们发现:C和C++事实上在声明变量的事实上有点不同,C++允许我们在程序的任意位置声明变量。
- 这大大的提高了大型C++程序的可读性,因为这样子我们就可以在突际需季使用变量的时候才来声明他们。
#include
using namespace std;
int main()
{
char buf[20];
cin.ignore(7);//忽略前7个字符
cin.getline(buf, 10);//输入字符串,包括空格
cout << buf << endl;
}
3.2 cin.get()&cin.peek()
#include
using namespace std;
int main()
{
int sum = 0;
cout << "请输入一串整数和任意数目的空格:" << endl;
int i;
while (cin >> i)
{
sum += i;
while (cin.peek() == ' ')//屏蔽空格
{
cin.get();
}
if (cin.peek() == '\n')
{
break;
}
}
cout << "所有数字的和是:" << sum << endl;
return 0;
}
3.3 cin.gcout() & cin.read()
cin.get()读取非空格的字符
#include
using namespace std;
int main()
{
const int size = 50;
char buf[size];
cout << "请输入一段文本:" << endl;
cin.read(buf, 5);
cout << "字符串收集到的字符数为:" << cin.gcount() << endl;
cout << "文本信息为:";
cout.write(buf, 5)<< endl;
return 0;
}
3 cout对象的多个方法
3.1 cout.precision()//精度控制
#include
using namespace std;
int main()
{
double result = sqrt(7.0);
cout << "对3开方保留小数点后0~9位,结果如下:" << endl;
for (int i = 0; i < 9; i++)
{
cout.precision(i);
cout<< result << endl;
cout << "当前的输出精度为:" << cout.precision() << endl;
}
}
3.2 cout.width()& cin.width()
cout.width():
- 输出n个字符,字符自动右对齐,左边用空格补上,视字符串中的空格为读取断开,即遇到空格时认为读取完了一块,在读取下一块,如果字符串长度大于n,则全部读取到下一个空格读完一块;
会把字符串全部读取,分成几块,每块n-1个字符,只输出第一块,如果字符串长度不满 n-1,剩下的用空格补齐;
cin.width():
- 从第n个字符开始到字符串不输出,输出时n-1个字符前边没有空格;同样也是只输出第一块
#include
using namespace std;
int main()
{
int width = 4;
char str[20];
cout << "请输入一段文本:" << endl;
cin.width(5);//cin>>str;实际只能提取4个字符,str最后一个是空字符,其他的放在流中等待接受。
while (cin >> str)
{
cout.width(width++);//将4个字符输出,设置每次输出的域宽增加1
cout << str << endl;
cin.width(5);
}
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)