03 2022 档案

摘要:16.1.1 函数模板 tmplate+模板参数列表 template<typename T> int compare(const T &v1, const T &v2){ if(v1<v2) return -1; if(v2<v1) return 1; return 0; } 模板参数列表不能为空 阅读全文
posted @ 2022-03-04 12:48 咪啪魔女 阅读(131) 评论(0) 推荐(0) 编辑
摘要:15.7.1 虚析构函数 在基类中将析构函数定义为虚函数,用动态绑定机制来保证执行正确的析构函数版本 class Base{ public: virtual ~Quote() = default; //动态绑定析构函数 }; //Derived是Base的派生类 Base *itemP = new 阅读全文
posted @ 2022-03-04 12:48 咪啪魔女 阅读(91) 评论(1) 推荐(0) 编辑
摘要:public\private\protected成员 访问说明符 对类成员 对类用户 对派生类成员 对派生类用户 public 可见 可见 可见 可见 private 可见 不可见 不可见 不可见 protected 可见 不可见 可见 基类中:不可见/派生类中:可见 对protected最后一点的 阅读全文
posted @ 2022-03-04 12:45 咪啪魔女 阅读(29) 评论(0) 推荐(0) 编辑
摘要:类的关系图: 一、作用域与名字查找 1.作用域的嵌套 派生类的作用域嵌套在基类之内 Bulk_quote bulk; cout<< bulk.isbn(); 名字isbn解析过程: 因为我们是通过Bulk_quote的对象调用isbn的,所以首先在Bulk_quote中查找,这一步没有找到名字isb 阅读全文
posted @ 2022-03-04 12:45 咪啪魔女 阅读(45) 评论(0) 推荐(0) 编辑
摘要:类的继承关系图: 抽象基类 含有纯虚函数的类成为抽象基类,用来表示一个通用概念 如此处Disc_count表示折扣书籍的通用概念,它的虚函数net_price为纯虚函数,表示折扣方案,它的派生类如Bulk_quote表示每个具体的折扣方案 纯虚函数只需声明,不必实现,末尾加上=0 抽象基类不能实例化 阅读全文
posted @ 2022-03-04 12:44 咪啪魔女 阅读(67) 评论(0) 推荐(0) 编辑
摘要:核心思想 面向对象程序设计(object-oriented programming)的核心思想是 封装:类的接口和实现分离 继承:定义相似的类型并对相似关系建模 动态绑定:在一定程度上忽略类的区别,而以统一的方式使用它们 继承 在C++中,将类型相关的函数与派生类不做改变直接继承 的函数区分对待。 阅读全文
posted @ 2022-03-04 12:43 咪啪魔女 阅读(166) 评论(0) 推荐(0) 编辑
摘要:15.2.1 定义基类 类的定义 定义Quote类 class Quote{ public : Quote() = default; Quote(const string &book, double sales_price): bookNo(book), price(sales_price) {} 阅读全文
posted @ 2022-03-04 12:43 咪啪魔女 阅读(282) 评论(0) 推荐(0) 编辑
摘要:调用时解析 使用基类的引用或指针调用虚函数时,会发生动态绑定 所以,知道运行时才会知道到底调用了哪个版本的虚函数 因此: 虚函数是在运行时才被解析 虚函数必须被定义 注意: 普通类型(非指针和引用类型)调用虚函数时不会发生动态绑定 class A{ public : //基类的print是虚函数 v 阅读全文
posted @ 2022-03-04 12:43 咪啪魔女 阅读(42) 评论(0) 推荐(0) 编辑
摘要:目录一、作用域与名字查找1.作用域的嵌套2.在编译时进行名字查找3.名字冲突与继承4.通过作用域运算符来使用隐藏的成员二、同名函数隐藏与虚函数覆盖1.几种必须区分的情况2.一个更复杂的例子 类的关系图: 一、作用域与名字查找 1.作用域的嵌套 派生类的作用域嵌套在基类之内 Bulk_quote bu 阅读全文
posted @ 2022-03-03 13:32 咪啪魔女 阅读(860) 评论(3) 推荐(0) 编辑
摘要:14.8.0 引入 函数对象 我们可以重载类类型的函数调用运算符,进而像使用函数一样使用这个类 那么这个类既可以存储状态,又可以当函数使用,十分灵活 //定义一个类,让它起到一个求绝对值函数的作用 struct absInt{ int operator()(int val) const { retu 阅读全文
posted @ 2022-03-02 14:08 咪啪魔女 阅读(166) 评论(0) 推荐(0) 编辑
摘要:一般设置为成员函数 定义前置递增递减 定义后置递增递减 后置先记录对象 然后用前置实现后置 阅读全文
posted @ 2022-03-02 14:07 咪啪魔女 阅读(36) 评论(0) 推荐(0) 编辑
摘要:目标代码 本节重在理解下述的代码,尤其是->的返回值 class StrBlobPtr{ public : string& operator*() const{ auto p = check(curr, "dereference past end"); return (*p)[curr]; //*p 阅读全文
posted @ 2022-03-02 14:07 咪啪魔女 阅读(45) 评论(0) 推荐(0) 编辑
摘要:在13.1节中已经介绍过赋值运算符的编写,再次不再赘述,主要强调三个原则 参数:const引用 返回值:左侧对象引用 步骤:拷贝参数对象,释放左对象,更新左对象。【处理自赋值】 用初始化列表initializer_list来赋值 和拷贝赋值及移动赋值运算符一样,其他重载的赋值运算符也必须先释放当前内 阅读全文
posted @ 2022-03-02 14:06 咪啪魔女 阅读(28) 评论(0) 推荐(0) 编辑
摘要:表示容器的类通常可以通过元素在容器中的位置访问元素,这些类一般会定义下标运算符operator[]。 下标运算符必须是成员函数。 为了与下标的原始定义兼容,下标运算符通常以所访问元素的引用作为返回值,这样做的好处是下标可以出现在赋值运算符的任意一端。进一步,我们最好同时定义下标运算符的常量版本和非常 阅读全文
posted @ 2022-03-02 14:06 咪啪魔女 阅读(169) 评论(0) 推荐(0) 编辑
摘要:14.3.0 基本介绍 通常情况下,我们把算术和关系运算符定义成非成员函数以允许对左侧或右侧的运算对象进行转换(参见14.1节,第492页)。 参数:常量引用。因为这些运算符一般不需要改变运算对象的状态,所以形参都是常量的引用。 返回值:值返回。算术运算符通常会计算它的两个运算对象并得到一个新值,这 阅读全文
posted @ 2022-03-02 14:05 咪啪魔女 阅读(116) 评论(0) 推荐(0) 编辑
摘要:14.2.1 重载输出运算符 参数与返回值 第一个形参:ostream的引用【ostream无法复制】 第二个新参:常量引用【避免复制对象】 返回:ostream的引用【链式使用】 Sale_data的输出运算符 ostream& operator<<(ostream &os; const Sale 阅读全文
posted @ 2022-03-02 13:16 咪啪魔女 阅读(76) 评论(0) 推荐(0) 编辑
摘要:基本介绍 重载运算符是特殊名字的函数 名字:operator后面加上需要重载的运算符号 构成: 参数列表 返回类型 函数体 注意点: 不能含有默认实参 第一个(左侧)运算对象绑定到隐式的this,所以显式的运算对象比实际的运算对象少一个 至少有一个类类型对象参数 //错误:不能重新定义内置的运算符 阅读全文
posted @ 2022-03-02 13:15 咪啪魔女 阅读(85) 评论(0) 推荐(0) 编辑
摘要:目录信号量PV操作基本介绍数据结构解决进程互斥问题解决进程同步问题代码实现(以同步问题为例) 信号量PV操作 基本介绍 信号量(Semaphore):是表示资源的实体,是一个与队列有关的整型变量,其值仅能由P、V操作改变。 信号量分为:公用信号量和私用信号量。 公用信号量:用于实现进程间的互斥,初值 阅读全文
posted @ 2022-03-01 19:00 咪啪魔女 阅读(1497) 评论(0) 推荐(0) 编辑
摘要:定义一个类时,我们必须对它进行拷贝控制,即控制该类在进行拷贝、赋值、移动和销毁时要进行哪些操作 一个类通过五个特殊的成员函数进行拷贝控制 拷贝构造函数 拷贝赋值函数 移动构造函数 移动赋值函数 析构函数 拷贝构造和移动构造函数:用同类型初始化对象时该做什么 拷贝和赋值运算符:将一个对象赋予同类型对象 阅读全文
posted @ 2022-03-01 15:22 咪啪魔女 阅读(113) 评论(0) 推荐(0) 编辑
摘要:为了定义这些成员,我们首先必须确定此类型对象的拷贝语义。一般来说,有两种选择:可以定义拷贝操作,使类的行为看起来像一个值或者像一个指针。 类的行为像一个值,意味着它应该也有自己的状态。当我们拷贝一个像值的对象时,副本和原对象是完全独立的。改变副本不会对原对象有任何影响,反之亦然。 行为像指针的类则共 阅读全文
posted @ 2022-03-01 15:22 咪啪魔女 阅读(33) 评论(0) 推荐(0) 编辑
摘要:目录一、介绍二、shared_ptr类make_shared函数shared_ptr的拷贝和引用shared_ptr自动销毁所管理的对象……shared_ptr还会自动释放相关联对象的内存使用动态生存期的资源的类应用举例:Blob类定义Blob类StrBlob的构造函数元素访问成员函数StrBlob 阅读全文
posted @ 2022-03-01 09:39 咪啪魔女 阅读(590) 评论(1) 推荐(5) 编辑
摘要:程序使用三种不同的内存 静态内存:static成员以及任何定义在函数之外的变量 栈内存:一般局部变量 堆内存(自由空间):动态分配的对象 静态内存和栈内存中的变量由编译器产生和销毁,动态分配的对象在我们不再使用它时要由程序员显式地销毁 12.1.0 介绍 动态分配内存 new():为对象分配空间,并 阅读全文
posted @ 2022-03-01 09:28 咪啪魔女 阅读(45) 评论(0) 推荐(0) 编辑

more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示