(三十一)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()是面对单字符的。



目录
相关文章
CF1553B Reverse String(数学思维)
CF1553B Reverse String(数学思维)
40 0
|
1月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
21 0
|
5月前
|
存储 安全 程序员
老程序员分享:List、Map、Set之间的联系与区别:
老程序员分享:List、Map、Set之间的联系与区别:
|
6月前
break,continue,return的区别深度剖析
break,continue,return的区别深度剖析
|
6月前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之4
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之4
57 0
|
存储 自然语言处理 C++
【C++杂货铺】set 和 map 使用总结
【C++杂货铺】set 和 map 使用总结
34 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之5
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之5
45 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之2
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之2
40 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之1
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之1
54 0