前言: 最近使用虚函数的时候遇到了一个坑,折腾了挺久,后来查了一些资料才搞明白,遂记录一下。 假如有两个类A、B。B继承A,那么这个时候,A类的指针类型可以指向B的对象。 这个时候称a的静态类型是A,动态类型是B。 那么这里测试一下将a的静态类型转换为B,然后分别调用say()函数,会发生什么? 输出结果: 这里我们知道a和b实际上是指向了同一个对象,但是为什么调用say()函数却发生了不同的结果,是因为普通成员函数的调用,是由静态类型决定的。 然后我们给say()函数加上virtual(虚函数)声明 输出: 这个…

2021年03月31日 0条评论 329点热度 0人点赞 阅读全文

之前尝试重定向std输出语句,并没有找到合适解决重定向时如何捕获输出事件的问题,只能使用定时器定时的检测缓冲区中的内容。 《关于std::cerr\cout\cin的重定向》 之后我在一个开源项目的代码中找到一个方案可以完美的解决这个问题。 使用这个方法首先得先了解流缓冲区std::streambuf。流缓冲区是负责它所关联的流对象所有写入、读取操作的对象,流对象会将输入输出操作都委托给缓冲区对象,将缓冲区当作一个流对象与输入输出之间的一个中介。 std::streambuf的详细介绍,戳一戳 这里主要关注sync…

2021年03月18日 0条评论 430点热度 0人点赞 阅读全文