不太擅长总结,把上次作业里的都写上吧
重载运算符
- 重载运算符即运算符与类结合,产生新的含义。
- 引入函数运算符是为了实现类的多态性
- 重载的运算符是带有特殊名称的函数,函数名是由关键字 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,它定义了三种新的数据类型:
- ofstream:该数据类型表示输出文件流,用于创建文件并向文件写入信息。
- ifstream:该数据类型表示输入文件流,用于从文件读取信息。
- 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的核心包括以下三部分:
- 容器:容器是用来管理某一类对象的集合,如 deque、list、vector、map 等。
- 算法:算法作用于容器,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
- 迭代器:迭代器用于遍历对象集合的元素,这些集合可能是容器,也可能是容器的子集。
容器就提两个上次作业里的
- 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++毕竟是一门应用性很强的课程,学习是要和写代码紧密联系的,还是要多练。