C++笔记
来源:互联网 发布:新手可以做淘宝代销吗 编辑:程序博客网 时间:2024/06/04 19:56
访问控制与继承:
protected:
1.和私有成员类似,受保护的成员对于类的用户不可访问
2.和公有成员类似,受保护的成员对于派生类的成员和友元可访问
3.派生类的成员和友元只能通过派生类对象访问基类受保护成员。派生类对于基类对象的受保护成员没有任何访问权限
C++ 将对象的构造和析构函数声明为Protected的结果
dynamic_cast可以交叉转换(转换成兄弟类的指针或引用),static_cast不能
派生类(指针或引用)向基类转换:dynamic_cast //运行时进行安全检查
基类向派生类转换:static_cast //已知基类向派生类转换是安全的
类型转换:
先看类是否有操作符重载函数,如果有,使用对应的构造函数
然后看类是否具有类型转换函数
线程同步方式:
1.临界区;
2.互斥量;
3.信号量;
4.事件;
临界区和互斥量区别:
临界区只能用在同进程的不同线程同步,而互斥量可用在不同进程间的线程同步
lambda:
定义:理解为未命名的内联函数。由捕获列表,参数列表,返回类型,函数体组成。
一定要包含捕获列表和函数体。[] {return 1;}
RAII:
将资源的声明周期绑定到对象,构造时初始化,析构时释放资源。
std::mutex m; void bad() { m.lock(); // 请求互斥 f(); // 若 f() 抛异常,则互斥决不被释放 if(!everything_ok()) return; // 提早返回,互斥决不被释放 m.unlock(); // 若 bad() 抵达此语句,互斥才被释放} void good(){ std::lock_guard<std::mutex> lk(m); // RAII类:互斥请求即是初始化 f(); // 若f()抛异常,则释放互斥 if(!everything_ok()) return; // 提早返回,互斥被释放}
具有继承与复合的类
class base { public: base() { cout << "1base_ctor" << endl; } ~base() { cout << "6base_dtor" << endl; } }; class component { public: component() { cout << "2component_ctor" << endl; } ~component() { cout << "5component_dtor" << endl; } }; class derived : public base { public: derived() : base() { cout << "3derived_ctor" << endl; } ~derived() { cout << "4derived_dtor" << endl; } private: component m_data; }; int main() { derived der; return 0; }输出结果:
1base_ctor 2component_ctor 3derived_ctor 4derived_dtor 5component_dtor 6base_dtor
侯捷说有复合和继承的时候不确定构造和析构的先后顺序。
以上代码测试得到在VS2015下:
先后构造基类,成分类,派生类。
先后析构派生类,成分类,基类。
const object不能调用non-const member function
阅读全文
0 0
- C - 笔记
- c笔记
- c笔记
- C 笔记
- c 笔记
- C笔记
- C笔记
- C笔记
- C 笔记
- C 笔记
- C笔记
- c 笔记
- C笔记
- C笔记
- C笔记
- C++/C笔记
- 笔记(C/C++)
- C++/C学习笔记
- [DP] BZOJ4321. queue2
- Webpack构建目标(Targets)
- windows用psftp传文件到Linux
- ARouter 路由框架
- 使用 Task 简化异步编程
- C++笔记
- Android IPC机制学习笔记(一)
- apache Shiro学习笔记(三)Authorization
- websocket与struts2冲突
- iOS 11开发教程(十三)iOS11应用编辑界面添加视图
- jsp自定义行数 表格填充
- 解决方案:python version 2.7 required,which was not found in
- LogIntercep
- 先知创新大会议题第二弹:你不知道的网络安全黑科技