C/C++知识点

友元函数

在定义一个类的时候,可以把一些函数(全局函数和其他类的成员函数)声明为友元,这些函数就成为该类的友元函数,在友元函数内部就可以访问该类对象的私有成员。

将全局函数声明为友元:friend 返回值类型 函数名(参数列表);
将其他类的成员函数(不是私有成员函数)声明为友元:friend 返回值类型 其他类的类名::成员函数名(参数列表);


友元类

一个类A可以将另一个类B声明为自己的友元,类B的所有成员函数就都可以访问类A对象的私有成员。

在类定义中声明友元类:friend class 类名;

虚函数

在基类中使用关键字 virtual 声明的函数,在派生类中重新定义积累中定义的虚函数时,会告诉编译器不要静态链接到该函数。

class Shape 
{
	protected:
		int width, height;
	public:
		Shape(int a = 0, int  b = 0)
		{
			width = a;
			height = b;
		}
		virtual int area() 
		{
			cout << "Parent class: " << endl;
			return 0;
		}
};

class Rectangle: public Shape
{
	public:
		Rectange(int a=0, int b= 0):Shape(a, b) { }
		int area() 
		{
			cout << "Rectangle class area: " << endl;
			return (width*height);
		}
};

class Triangle: public Shape
{
	public:
		Triangle(int a=0, int b=0): Shape(a, b) { }
		int area()
		{
				cout << "Triangle class area: " << endl;
		}
};

纯虚函数

在基类中不能对虚函数给出有意义的实现,就会用到纯虚函数。

class Shape
{
	protected:
		int width, height;
	public:
		Shape(int a = 0, int b = 0)
		{
			width = a;
			height = b;
		}
		virtual int area() = 0; //纯虚函数
};

*argv[]和**argv 什么区别?

知乎连接

文件流、字符串流

文件流

在这里插入图片描述

缓冲状态:无缓冲、行缓冲、全缓冲。


C++ I/O 重定向

在默认情况下,cin 只能接收从键盘输入的数据,cout 也只能将数据输出到屏幕上。通过重定向,cin 可以将指定文件作为输入源,即接收文件中早已准备好的数据,同样 cout 可以将原本要输出到屏幕上的数据转而写到指定文件中。

1. freopen()函数
该函数定义在<stdio,h>头文件中,专门用于重定向输入流(包括scanf()gets()等)和输出流(包括printf()puts()等)。同时,也可以对 C++ 中的 cincout 进行重定向。

#include <iostream>    //cin、cout
#include <string>      //string
#include <stdio.h>     //freopen
using namespace std;
int main()  
{
    string name, url;
    //将标准输入流重定向到 in.txt 文件
    freopen("in.txt", "r", stdin);
    cin >> name >> url;

    //将标准输出重定向到 out.txt文件
    freopen("out.txt", "w", stdout); 
    cout << name << "\n" << url;
    return 0;
}

在当前目录下创建一个 in.txt 文件,其包含的内容如下:

C++
http://c.biancheng.net/cplus/

与此同时,该目录下会自动生成一个 out.txt 文件,其包含的内容和 in.txt 文件相同:

C++
http://c.biancheng.net/cplus/

2. C++ rdbuf()函数

该函数定义在 <ios>头文件中,专门用于实现 C++ 输入输出流的重定向。

get (1) streambuf* rdbuf() const;
set (2) streambuf* rdbuf (streambuf* sb);

streambuf 是 C++ 标准库用于表示缓冲区的类,该类的指针对象用于代指某个具体的流缓冲区。

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    //打开 in.txt 文件,等待读取
    ifstream fin("in.txt");
    //打开 out.txt 文件,等待写入
    ofstream fout("out.txt");
    streambuf *oldcin;
    streambuf *oldcout;
    char a[100];
    //用 rdbuf() 重新定向,返回旧输入流缓冲区指针
    oldcin = cin.rdbuf(fin.rdbuf());
    //从input.txt文件读入
    cin >> a;
    //用 rdbuf() 重新定向,返回旧输出流缓冲区指针
    oldcout = cout.rdbuf(fout.rdbuf());
    //写入 out.txt
    cout << a << endl;

    //还原标准输入输出流
    cin.rdbuf(oldcin); // 恢复键盘输入
    cout.rdbuf(oldcout); //恢复屏幕输出
    //打开的文件,最终需要手动关闭
    fin.close();
    fout.close();
    return 0;
}

exit(0);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值