class Point {
// friend Point operator+(const Point &, const Point &);
friend ostream &operator<<(ostream &, const Point &);
friend istream &operator>>(istream &cin, Point &point);
int m_x;
int m_y;
public:
Point(int x, int y) :m_x(x), m_y(y) {}
void display() {
cout << "(" << m_x << ", " << m_y << ")" << endl;
}
Point(const Point &point) {
m_x = point.m_x;
m_y = point.m_y;
}
const Point operator+(const Point &point) const {
return Point(m_x + point.m_x, m_y + point.m_y);
}
const Point operator-(const Point &point) const {
return Point(m_x - point.m_x, m_y - point.m_y);
}
Point &operator+=(const Point &point) {
m_x += point.m_x;
m_y += point.m_y;
return *this;
}
bool operator==(const Point &point) const {
return (m_x == point.m_x) && (m_y == point.m_y);
}
bool operator!=(const Point &point) const {
return (m_x != point.m_x) || (m_y != point.m_y);
}
const Point operator-() const {
return Point(-m_x, -m_y);
}
// 前置++
Point &operator++() {
m_x++;
m_y++;
return *this;
}
// 后置++
const Point operator++(int) {
Point old(m_x, m_y);
m_x++;
m_y++;
return old;
}
};
// output stream -> ostream
ostream &operator<<(ostream &cout, const Point &point) {
cout << "(" << point.m_x << ", " << point.m_y << ")";
return cout;
}
// input stream -> istream
istream &operator>>(istream &cin, Point &point) {
cin >> point.m_x;
cin >> point.m_y;
return cin;
}
c语言风格的类型转换
c++中有4个类型转换符(适用格式:xxx_cast(expression)
const_cast:一般用于去除const属性,将const转换成非const
dynamic_cast:一般用于多态类型的转换,有运行时安全检测,会将不安全的转换设置为null
static_cast:
reinterpret_cast
auto
decltype :可以获取变量的类型
nullptr:可以解决NULL的二义性问题
快速便利
更简洁的初始化
异常是一种在程序运行的过程中可能会发生的错误
异常没有被处理,会导致程序终止
c++中的异常可以被try…catch…,但是没有finally
throw异常后,会在当前函数中查找匹配的catch,找不到就终止当前函数代码,去上一层函数中查找。如果最终找不到匹配的catch,整个程序就会终止
异常的抛出声明:为了增强可读性和方便团队协作,如果函数内部可能会抛出异常,建议函数声明一下异常类型
自定义异常类型
拦截所有异常类型
标准异常(std中定义的标准异常)
智能指针就是在指针变量销毁时自动释放指向对象的内存(会调用类的析构函数)
传统指针存在的问题
智能指针就是为了解决传统指针存在的问题
shared_ptr:共享指针
shared_ptr的设计理念:多个shared_ptr可以指向同一个对象,当最后一个shared_prt在作用域范围内结束时,对象才会被释放
可以通过一个已存在的智能指针初始化一个新的智能指针
在数组中的用法如下:
shared_ptr的原理
shared_ptr的循环引用:智能指针指向的对象不会被销毁,导致内存泄漏
weak_ptr:弱指针
unique_ptr:唯一引用
自我模拟实现智能指针
后记
??个人总结,欢迎转载、评论、批评指正