概览:选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序。稳定性分析。
react-05-前端工事搭建-redux的使用
概览: redux 的使用
react-04-前端工事搭建-react客户端渲染
概览: react,sass,webpack的使用 , 客户端渲染
react-03-前端工事搭建-react服务器端渲染
概览:react的使用 , 服务器端渲染
react-02-又是起手式:同构js
概览:mongodb以及mongoose的使用
react-01-起手式:技术准备
概览: node express
C++ 14 重载操作符与转换
重载操作符
Cat.h1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using std::string; using std::ostream; using std::istream;
class Cat {
public:
Cat() {}
Cat(string name) :name(name) {};
// 重载输入、输出操作符
// 若供外部使用,写非成员函数的样子 添加友元
// 成员函数的写法只要一个左操作符参数
friend ostream& operator<<(ostream& out, Cat& cat);
friend istream& operator>>(istream& in , Cat& cat);
private:
string name;
};
Cat.cpp
1 |
|
重载函数的使用 main.cpp
1 |
|
算术操作符重载
Book.h
1 |
|
算术符号重载后的使用
1 |
|
下标操作费、成员访问操作符
下标操作符重载示例
1 |
|
使用解引用操作符与箭头符号重载,构建智能指针
指针计数类 ScrPtr.h
1 |
|
指针封装对象 ScreenPtr.h
1 |
|
C++ 13 复制控制
复制构造函数
复制构造函数,传入同类型其他对象,初始化成员 。
1 | Message(const Message &m) :contents(m.contents), folders(m.folders){} ; |
操作符重载
1 | // 操作符重载,左操作数为this,又操作数为参数 |
析构函数
变量在超出作用域时自动撤销,动态分配对象被删除时调用。
1 | ~Message(); |
消息处理示例
Message.h
1 |
|
Message.cpp
1 |
|
Folder.h
1 |
|
Folder.cpp1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Folder::~Folder()
{
empty_msgs();
}
Folder::Folder(const Folder &f)
{
copy_msgs(f.msgs);
}
Folder & Folder::operator=(const Folder &f)
{
if (&f != this)
{
empty_msgs();
copy_msgs(f.msgs);
}
return *this;
}
void Folder::save(Message & msg)
{
msgs.insert(&msg);
msg.addFolder(this);
}
void Folder::remove(Message & msg)
{
msgs.erase(&msg);
msg.remFolder(this);
}
vector<Message*> Folder::messages()
{
return vector<Message*>(msgs.begin(), msgs.end());
}
void Folder::debug_print()
{
cerr << "Folder contains " << msgs.size() << "messages " << endl;
int ctr = 1;
for (Msg_iter beg = msgs.begin(); beg != msgs.end(); ++beg)
cerr << "Message " << ctr++ << ":\n\t" << (*beg)->print_message << endl;
}
void Folder::copy_msgs(const set<Message*> &m)
{
for (Msg_iter beg = m.begin(); beg != m.end(); ++beg)
(*beg)->save(*this); // 遍历消息保存到文件夹中
}
void Folder::empty_msgs()
{
Msg_iter it = msgs.begin();
while (it != msgs.end())
{
Msg_iter next = it;
++next;
(*it)->remove(*this); // 遍历消息,删除消息与文件夹的关联
it = next;
}
}
智能指针
通过记录指针被复制次数,避免产生悬垂指针。
普通含有指针成员的类 HasPtr.h1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class HasPtr
{
public:
HasPtr(int *p, int i) :ptr(p), val(i) {}
int *get_ptr()const { return ptr; }
int get_val() const { return val; }
void set_ptr(int *p){ptr = p; }
void set_val(int v) { val = v; }
int get_ptr_val() const { return *ptr; }
void set_ptr_val(int val)const { *ptr = val; }
private:
int *ptr;
int val;
};
main.cpp
1 |
|
引入指针计数器 U_Ptr.h
1 |
|
HasPtr.h
1 |
|
我好懒
C++ 12 类
类定义
1 |
|
类实现
1 |
|
类使用
1 |
|
友元
1 |
|
静态变量
1 |
|