摘要: 一、产生临时对象的情况和解决方案 1、以传值的方式给函数传递参数 一般以传引用的方式来传递参数,可以少调一次构造函数和析构函数 2、类型转换生成的临时对象/隐式类型转换以保证函数调用成功 类型转换生成的临时对象 class Element { int m_val; Element(int val = 阅读全文
posted @ 2020-06-14 22:27 min_zhi 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 一、左值、右值 1、概念 左值:能又在赋值等号左侧的东西,它能够代表一个地址 右值:不能出现在赋值等号的左侧 注意:C++中一个表达是,要么是左值,要么是右值,不可能两者都是,或者两者都不是 只是有时候,左值可以被当作右值使用 i = i + 1; // i是左值,不是右值,虽然出现在了等号右边// 阅读全文
posted @ 2020-06-11 00:03 min_zhi 阅读(656) 评论(0) 推荐(0) 编辑
摘要: 1、子类调用父类的同名函数(非虚函数) class Base { public: void func(); void func(int i); }; class Element : public Base { public: void func(int i); // 当子类有父类的同名函数 }; i 阅读全文
posted @ 2020-06-07 22:48 min_zhi 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算; 否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。 1、返回值和参数 // 返回值类型 type_info // 标准库类型,相当于一个类 // 其中有成员函数 name() 阅读全文
posted @ 2020-06-07 22:06 min_zhi 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 一、概念 1、运算符重载,本质上是编写以运算符作为函数名的函数 返回值类型 operate 运算符 (形参列表) { ... } 运算符的操作数成为运算符函数调用的实参,运算的结果就是运算符函数的返回值 2、运算符可以被重载为全局函数,也可以被重载为成员函数 class Element { publ 阅读全文
posted @ 2020-06-07 16:56 min_zhi 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 一、默认构造函数 1、=default 和 =delete = default // 只能用于不带参数的构造函数,不能用于带参,或者普通函数 = delete // 禁止系统给我们生成默认的不带参数的构造函数 2、explicit 一般只带一个默认参数的构造函数前面会加explicit,避免一些数字 阅读全文
posted @ 2020-06-07 15:58 min_zhi 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 一、概述1、独占式,同一时刻只能有一个unique_ptr 指针指向这个对象,当unique_ptr 被销毁的时刻,它所指向的对象也会被销毁。2、初始化 unique_ptr p1(new int(10)); unique_ptr p2 = make_unique(10); // C++14中才有m 阅读全文
posted @ 2020-06-07 13:06 min_zhi 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 一、简介 1、是个类模板,指向一个由shared_ptr管理的对象,辅助shared_ptr 工作,weak_ptr不能控制对象的生命周期 2、将weak_ptr 绑定到shared_ptr 上,并不会改变shared_ptr 的引用计数, 当shared_ptr 需要释放对象时仍照常释放,不管是否 阅读全文
posted @ 2020-06-07 12:57 min_zhi 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 一、语法: shared_ptr p(new int(100)); // 正确!显示构造,直接初始化 shared_ptr p = new int(100); // 错误!智能指针是explicit,不可用隐式类型转换,必须直接用初始化 二、简介: //常见的几种智能指针 shared_ptr, u 阅读全文
posted @ 2020-06-07 12:52 min_zhi 阅读(427) 评论(0) 推荐(0) 编辑
摘要: class B { public: int m_iNum; virtual void foo(); }; class D : public B { public: char *m_szName[100]; }; void func(B *pb) { D *pd1 = static_cast(pb); 阅读全文
posted @ 2020-06-07 12:31 min_zhi 阅读(412) 评论(0) 推荐(0) 编辑