运算符重载,文件操作,STL,个人感受

不太擅长总结,把上次作业里的都写上吧

重载运算符

  • 重载运算符即运算符与类结合,产生新的含义。
  • 引入函数运算符是为了实现类的多态性
  • 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。

例如重载+:

#include<iostream>
using namespace std;
class AddX {
private:
 int x;
 int y;
public:
 AddX() {
 }
 void setX(int sx) {
  x = sx;
 }
 void setY(int sy) {
  y = sy;
 }
 int xTimesY() {
  return x * y;
 }
 AddX operator +(const AddX& a) {
  AddX ax;
  ax.x = this->x + a.x;
  ax.y = this->y + a.y;
  return ax;
 }
};
int main() {
 AddX ax1;
 AddX ax2;
 AddX ax3;
 ax1.setX(2);
 ax1.setY(3);
 cout << ax1.xTimesY() << endl;
 ax2.setX(4);
 ax2.setY(5);
 cout << ax2.xTimesY() << endl;
 ax3 = ax1 + ax2;
 cout << ax3.xTimesY() << endl;
 return 0;
}

输出结果为:
6
20
48

有些运算符无法重载,例如:

  • 成员访问运算符.
  • 成员指针访问运算符.* , ->*
  • 域运算符::等

文件操作

文件操作需要用到fstream,它定义了三种新的数据类型:

  1. ofstream:该数据类型表示输出文件流,用于创建文件并向文件写入信息。
  2. ifstream:该数据类型表示输入文件流,用于从文件读取信息。
  3. fstream:该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

要实现文件操作,必须在头文件中包含 < iostream >和< fstream >。
在从文件读取信息或者向文件写入信息之前,必须先打开文件。ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。
open()函数可以用于打开文件,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。
close() 函数可以用于关闭文件,close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。
写入时依旧使用<<,读取时依旧使用>>,不同的是这里使用ofstream/fstream和ifstream/fstream而不是cout与cin。
简单示例如下:

#include<iostream>
#include<fstream>
using namespace std;
class File {
private:
 string str = "Hello";
public:
 void outFile() {
  ofstream otf;
  otf.open("D:\\ThisTXT.txt");
  otf << str << endl;
  otf.close();
 }
 string inFile() {
  ifstream inf;
  inf.open("D:\\ThisTXT.txt");
  inf >> str;
  return str;
  inf.close();
 }
};
int main() {
 File f;
 f.outFile();
 cout << f.inFile() << endl;
}

运行结果为:
Hello

STL 标准模板库

STL是一套C++模板库,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
STL的核心包括以下三部分:

  1. 容器:容器是用来管理某一类对象的集合,如 deque、list、vector、map 等。
  2. 算法:算法作用于容器,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
  3. 迭代器:迭代器用于遍历对象集合的元素,这些集合可能是容器,也可能是容器的子集。

容器就提两个上次作业里的

  • Vectors:将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时。
  • Maps/Multimaps:Map的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现(实际上基于红黑树(RB-tree)实现),便于查找

迭代器的作用主要就是能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来,重载了*,++,==,!=,=运算符。用以操作复杂的数据结构,容器提供迭代器,算法使用迭代器。

一般声明使用示例:vector::iterator it;

简单示例如下:

#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
   vector<int> vec; 
   int i;
   cout << "vector size = " << vec.size() << endl;
   for(i = 0; i < 5; i++){
      vec.push_back(i);
   }
   cout << "extended vector size = " << vec.size() << endl;
   for(i = 0; i < 5; i++){
      cout << "value of vec [" << i << "] = " << vec[i] << endl;
   }
   vector<int>::iterator v = vec.begin();
   while( v != vec.end()) {
      cout << "value of v = " << *v << endl;
      v++;
   }
   return 0;
}

运行结果为:
vector size = 0
extended vector size = 5
value of vec [0] = 0
value of vec [1] = 1
value of vec [2] = 2
value of vec [3] = 3
value of vec [4] = 4
value of v = 0
value of v = 1
value of v = 2
value of v = 3
value of v = 4

个人感受

半个学期过去了,课上了三分之二,剩下的时间也不多了。我选这门课毕竟是重修,以前没怎么正儿八经的学过,考试也没通过,对这个还是比较有心理阴影的,这个学期经过一段时间的学习发现其实没有印象里那么可怕,但是同样不能懈怠。最后,C++毕竟是一门应用性很强的课程,学习是要和写代码紧密联系的,还是要多练。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值