【c++】iostreeam中的类为何不可以直接定义一个无参对象呢
缘起
#include <iostream> #include <fstream> #include <sstream> using namespace std;int main() {ofstream fs; //输出文件流 (正确)ostringstream os; //输出string流(正确)ostream o; //输出普通流 (错误) }
解惑
头文件iostream定义了三个类iostream, istream, ostream(三个普通流), 都存在这样的问题:不可以直接定义无参数的对象。原因可以从编译器提示看出
类中无参数的构造函数定义为protected,因此不可直接定义。
为何这么设计
iostream头文件定义读写控制窗口的类型,c++是跨平台的语言,不同的系统窗口操作是不同的,用户自己定义有些费劲,于是c++干脆定义了标准的输入对象cin,标准的输出对象cout。反正只是与窗口交互自己再去定义输入输出对象也没那必要。
非得自己定义一个iostream对象可以吗?
可以,有有参数的构造函数,两个例子
#ostream对象
#include <iostream>
#include <fstream>
int main () {std::filebuf fb;fb.open ("test.txt",std::ios::out);std::ostream os(&fb); os << "Test sentence\n";fb.close();return 0;
}
#istream对象
#include <iostream>
#include <fstream>
int main () {std::filebuf fb;if (fb.open ("test.txt",std::ios::in)){std::istream is(&fb); while (is)std::cout << char(is.get());fb.close();}return 0;
}
转载于:https://www.cnblogs.com/kaituorensheng/p/3462254.html
【c++】iostreeam中的类为何不可以直接定义一个无参对象呢相关推荐
- java 设计一个Dog类,有三个属性:名字,年龄和颜色,有一个方法输出叫声“汪汪”。设计要求:定义属性和方法定义一个无参构造方法和一个三参构造方法。另外写一个主类,在main里面使用三参构造方
public class dog { String name="啊啊"; String color="白"; int age=1; ...
- java中构造方法的理解,super()与构造方法,无参,有参构造方法,this()与构造方法。
一.为什么要引入构造方法. 当创建对象的时候需要对属性值初始化,构造方法,即对象创建时要执行的方法. 要求在实例化的同时,就指定好name,和age的值.这就要用到构造方法.又叫做构造器Constru ...
- java中构造方法的理解,super()与构造方法,无参,有参构造方法,this()与构造方法
一.为什么要引入构造方法. 当创建对象的时候需要对属性值初始化,构造方法,即对象创建时要执行的方法. 要求在实例化的同时,就指定好name,和age的值.这就要用到构造方法.又叫做构造器Constru ...
- 类的成员变量 请定义一个交通工具(Vehicle)的类其中有: 属性速度(speed)体积(size)等等 方法移动(move())设置速度(setSpeed(int speed))加速speed
/*类的成员变量 请定义一个交通工具(Vehicle)的类其中有:属性速度(speed)体积(size)等等 方法移动(move())设置速度(setSpeed(int speed))加速speedU ...
- python:掌握类的基本方法。定义一个Circle类,根据圆的半径求周长和面积。 再由Circle类创建2个圆对象,其半径分别为5和10,要求输出各自的周长和面积
掌握类的基本方法.定义一个Circle类,根据圆的半径求周长和面积. 再由Circle类创建2个圆对象,其半径分别为5和10,要求输出各自的周长和面积 请在[python数据分析之禅]gzh后台,回复 ...
- java定义一个圆类_2.8.1 如何定义一个圆的类
2.8 绝知此事要躬行--自己动手定义对象 在本章***一小节中不再给大家介绍更多新的知识,只是通过一个较为全面的实例把前面介绍的内容再复述一遍,好让大家加深一下印象,更深刻地理解一下Java的面向 ...
- python定义一个类描述数字时钟_定义一个时间类Time,能提供和设置由时、分、秒组成的时间,编写出应用程序,定义时间对象t...
展开全部 [基本题]定义一个时间类,提供设定时间.显示时间和秒数增加e68a8432313133353236313431303231363533313334336361371的功能,其中设定时间的方法 ...
- Java中Person类型赋值_Java设计:定义一个Person类和它的子类Employee。Person类有姓名、地址、电话号码和电子邮箱,...
匿名用户 1级 2017-04-26 回答 Person类: public class Person { private String address; private String name; pr ...
- 初学者-python中自定义类的已有self定义,后面使用出现object has no attribute问题
修改别人python代码,会遇到在类的init中已定义self,但后面使用还是找不到定义的self.*,其中一个原因是init中self定义顺序的问题,比如:如下为正确的 class LSTM(obj ...
最新文章
- pytorch手写数字识别验证四流网络
- python语言自学教程-3D图示Python标准自学教程入门篇
- linux通过字符串查看,linux命令strings有什么用?查找二进制文件可打印字符串。...
- ciscodk新科目——1Z1-807
- python脚本自动消除安卓版_python脚本中appium的自启动自关闭
- 理解 LruCache 机制
- 风变编程python第一关_风变编程【学习笔记】,第8关学习心得及代码扩展
- Python安装cv2库出错及解决:Could not find a version that satisfies the requirement cv2
- c++ 应输入表达式_【C语言编程入门系列】—— 第五章,C语言基本运算和表达式(一)...
- 视频教程-ThinkPHP5.0项目实战-PHP
- c语言流水灯循环左移程序,51单片机流水灯左移 右移控制程序
- 剩余电流互感器互感电流放大转真有效值
- c语言转换说明符总结(%d,%i,%u,%f,%o,%x,%X,%p,%s,%g,%e)
- J2EE进阶之自定义标签,JSTL标签,国际化 十四
- 那些在一个公司死磕了5-10年的人,最后都怎么样了?
- 玩转Qml(12)-再谈动态国际化
- Python-OpenCV 实现美图秀秀视频剪辑效果【转场】
- 活动时长计算尝试用Lambada 实现责任链的代码优化
- visto VTL搭建
- 第一部分 思科九年 一(2)