(三十一)cout.put()

简介:

以下还是不太明白,概念是抄的。

函数cout.put()是一个重要的C++ OOP(面向对象函数)概念——成员函数——的第一个例子。类定义了如何表示和控制数据。成员函数归类所有,描述了操纵类数据的方法。例如类ostream里面有一个put()成员函数,用于输出字符。只能通过类的特定对象(例如这里的cout对象)来使用成员函数。要通过对象(如cout)来说用成员函数,必须用句点将对象名和函数名称(put())连接起来,句点被称为成员运算符。cout.put()的意思是,通过类对象cout来使用函数put()。目前接触的类是istream和ostream,可以通过使用它们的成员函数来熟悉这个概念。


cout.put()成员函数提供了另一种显示字符的方法,可以替代<<运算符。现在读者可能会问,为何需要cout.put()。答案和历史有关。在C++的Release 2.0之前,cout将字符变量显示为字符,而将字符常量(如'M'和'N')显示为数字。问题是,C++早期版本和C一样,也将字符常量存储为int类型,也就是说,'M'的编码77将被储存在一个16位或32位的单元中,而char变量一般占8位。下面的语句从常量'M'中复制8位(左边的8位)到变量ch中:


char cn='m';

遗憾的是,这意味着,对于cout来说,'M'和ch看上去有天壤之别,虽然他们存储的值相同。因此,下面的语句将打印$字符的ASCII码,而不是字符$:

cout <<'$';

但下面的语句将打印字符$:

cout.put('$');

在Release2.0之后,C++将字符常量存储为char类型,而不是int类型。这意味着cout现在可以正确处理字符常量了。

cin对象有几种不同的方式可以读取输入的字符。通过使用一个利用循环来读取几个字符的程序,读者可以更容易地领会到这一点。

 

——————————

我大概的总结了一下:

貌似是因为在之前版本的C++,比如说char a='b',其中a是字符变量,b是字符常量,显示的时候,用cout<<a ,输出的就是b,用cout<<'a',输出的就是a的ASCII值?还是B的ASCII值?只有用cout.put('b'),才会显示b,而不是b的ASCII值?

总之,貌似跟现在无关。

用cout.put();  如果里面是变量,则显示变量的ASCII值所代表的字符,如果是整数,则显示ASCII值为该整数所代表的字符。里面先计算整数,再将整数转为字符输出。

用cout.put('');  如果单引号里面是数字,则显示最后一位数字(小数也显示最后一位),如果单引号里面是字母,则显示字母。因为'a'是一个文本,所以直接显示这个文本,而不是转成ASCII值再输出字符。

 

代码如下:


#include <iostream>
using namespace std;

int main()
{
	char a;
	cin >> a;		//这里假定用户输入的是a。
	int b = a;
	cout << a << "   ←cout a"<<endl;					//输出是a
	cout << b << "   ←cout b" << endl;					//输出是97
	cout.put(a) << "   ←cout.put(a)" << endl	;		//输出是a
	cout.put(b) << "   ←cout.put(b)" << endl;			//输出是a
	cout.put(a + 1) << "   ←cout.put(a+1)" << endl;	//输出是b
	cout.put(b + 1) << "   ←cout.put(b+1)" << endl;	//输出是b
	cout.put(97) << "   ←cout.put(97)" << endl;		//输出是a
	cout.put('97') << "   ←cout.put('97')" << endl;	//输出是7
	cout.put('a') << "   ←cout.put('a')" << endl;		//输出是a
	cout.put('b') << "   ←cout.put('b')" << endl;		//输出是b
	cout << endl;
	system("pause");
	return 0;
}

输出;

a
a   ←cout a
97   ←cout b
a   ←cout.put(a)
a   ←cout.put(b)
b   ←cout.put(a+1)
b   ←cout.put(b+1)
a   ←cout.put(97)
7   ←cout.put('97')
a   ←cout.put('a')
b   ←cout.put('b')

请按任意键继续. . .


注意,因为我也不知道的原因,不能用char a[10]之类的来定义,可能是因为字符串的原因吧。同样,如果用char a[10],那么cout.put(a)就无法显示了。

 

我觉得,可能是因为cout.put()是面对单字符的。



目录
相关文章
|
7月前
|
C++
C++初阶(十二)string的模拟实现
C++初阶(十二)string的模拟实现
40 0
CF1553B Reverse String(数学思维)
CF1553B Reverse String(数学思维)
42 0
|
4月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
4月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
4月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
6月前
|
C++
【洛谷 P1000】超级玛丽游戏 题解(raw string literal)
这是一个关于使用字符画展示超级玛丽场景的编程题。无需输入,输出为指定的马里奥图案。提供的C++代码直接打印了预设的场景图案。
55 0
|
7月前
qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码
qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码
331 0
|
存储 自然语言处理 C++
【C++杂货铺】set 和 map 使用总结
【C++杂货铺】set 和 map 使用总结
35 0
|
存储 算法 编译器
【C++初阶】九、STL---string/vector/list补充
目录 一、vs和g++下string结构说明 1.1 vs下string的结构 1.2 g++下string的结构 二、vector和list对比 2.1 vector优缺点 2.2 list优缺点 三、迭代器失效问题 四、list模拟实现 -&gt; 操作符重载问题
142 0
【C++初阶】九、STL---string/vector/list补充
|
存储
三道题教你快速掌握Map和Set
Map 和 Set 都是接口类,都不能不能直接实例化对象,如果要实例化只能实例化其对于实现类!
三道题教你快速掌握Map和Set