D
G
O
L

随笔分类 -  c++

摘要:纯虚函数和抽象类 纯虚函数是一种特殊的虚函数,在某些情况下,基类中不能对虚函数给出有意义的实现,把它声明为纯虚函数。 纯虚函数只有函数名、参数和返回值类型,没有函数体,具体实现留给该派生类去做。 语法: virtual 返回值类型 函数名 (参数列表)=0; 纯虚函数在基类中为派生类保留一个函数的名 阅读全文
posted @ 2023-02-18 16:55 jinganglang567 阅读(34) 评论(0) 推荐(0)
摘要:析构派生类 构造函数不能继承,创建派生类对象时,先执行基类构造函数,再执行派生类构造函数。 析构函数不能继承,而销毁派生类对象时,先执行派生类析构函数,再执行基类析构函数。 派生类的析构函数在执行完后,会自动执行基类的析构函数。 如果手工的调用派生类的析构函数,也会自动调用基类的析构函数。 析构派生 阅读全文
posted @ 2023-02-18 16:50 jinganglang567 阅读(59) 评论(0) 推荐(1)
摘要:多态的对象模型 类的普通成员函数的地址是静态的,在编译阶段已指定。 如果基类中有虚函数,对象的内存模型中有一个虚函数表,表中存放了基类的函数名和地址。 如果派生类中重定义了基类的虚函数,创建派生类对象时,将用派生类的函数取代虚函数表中基类的函数。 C++中的多态分为两种:静态多态与动态多态。 静态多 阅读全文
posted @ 2023-02-18 16:42 jinganglang567 阅读(20) 评论(0) 推荐(1)
摘要:多态 基类指针只能调用基类的成员函数,不能调用派生类的成员函数。 如果在基类的成员函数前加virtual 关键字,把它声明为虚函数,基类指针就可以调用派生类中同名的成员函数,通过派生类中同名的成员函数,就可以访问派生对象的成员变量。 有了虚函数,基类指针指向基类对象时就使用基类的成员函数和数据,指向 阅读全文
posted @ 2023-02-18 16:38 jinganglang567 阅读(25) 评论(0) 推荐(0)
摘要:多继承与虚继承 多继承的语法: class 派生类名 : [继承方式1] 基类名1, [继承方式2] 基类名2,...... { 派生类新增加的成员 }; 虚继承可以解决菱形继承的二义性和数据冗余的问题。 有了多继承,就存在菱形继承,有了菱形继承就有虚继承,增加了复杂性。 阅读全文
posted @ 2023-02-18 15:08 jinganglang567 阅读(17) 评论(0) 推荐(0)
摘要:继承的对象模型 1)创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数。 2)销毁派生类对象时,先调用派生类的析构函数,再调用基类的析构函数。如果手工调用派生类的析构函数,也会调用基类的析构函数。 3)创建派生类对象时只会申请一次内存,派生类对象包含了基类对象的内存空间,this指针相同 阅读全文
posted @ 2023-02-18 15:00 jinganglang567 阅读(28) 评论(0) 推荐(0)
摘要:继承 继承可以理解为一个类从另一个类获取成员变量和成员函数的过程。 语法: class 派生类名:[继承方式]基类名 { 派生类新增加的成员 }; 被继承的类称为基类或父类,继承的类称为派生类或子类。 继承和派生是一个概念,只是站的角度不同。 派生类除了拥有基类的成员,还可以定义新的成员,以增强其功 阅读全文
posted @ 2023-02-13 10:50 jinganglang567 阅读(30) 评论(0) 推荐(0)
摘要:重载new&delete运算符 重载new和delete运算符的目是为了自定义内存分配的细节。(内存池:快速分配和归还,无碎片) 在C++中,使用new时,编译器做了两件事情: 1)调用标准库函数operator new()分配内存; 2)调用构造函数初始化内存; 使用delete时,也做了两件事情 阅读全文
posted @ 2023-02-13 10:44 jinganglang567 阅读(299) 评论(0) 推荐(0)
摘要:重载下标运算符 如果对象中有数组,重载下标运算符[],操作对象中的数组将像操作普通数组一样方便。 下标运算符必须以成员函数的形式进行重载。 下标运算符重载函数的语法: 返回值类型 &operator[](参数); 或者: const 返回值类型 &operator[](参数) const; 使用第一 阅读全文
posted @ 2023-02-13 10:32 jinganglang567 阅读(129) 评论(0) 推荐(0)
摘要:运算符重载 C++将运算符重载扩展到自定义的数据类型,它可以让对象操作更美观。 例如字符串string用加号(+)拼接、cout用两个左尖括号(<<)输出。 运算符重载函数的语法: 返回值 operator运算符(参数列表); 运算符重载函数的返回值类型要与运算符本身的含义一致。 非成员函数版本的重 阅读全文
posted @ 2023-02-13 09:23 jinganglang567 阅读(34) 评论(0) 推荐(0)
摘要:友元 如果要访问类的私有成员变量,调用类的公有成员函数是唯一的办法,而类的私有成员函数则无法访问。 友元提供了另一访问类的私有成员的方案。友元有三种: l 友元全局函数。 l 友元类。 l 友元成员函数。 1)友元全局函数 在友元全局函数中,可以访问另一个类的所有成员。 2)友元类 在友元类所有成员 阅读全文
posted @ 2023-02-12 17:34 jinganglang567 阅读(23) 评论(0) 推荐(0)
摘要:对象模型 在C语言中,数据和处理数据的操作(函数)是分开的。也就是说,C语言本身没有支持数据和函数之间的关联性。 C++用类描述抽象数据类型(abstract data type,ADT),在类中定义了数据和函数,把数据和函数关联起来。 对象中维护了多个指针表,表中放了成员与地址的对应关系。 C++ 阅读全文
posted @ 2023-02-12 17:14 jinganglang567 阅读(30) 评论(0) 推荐(0)
摘要:静态成员 类的静态成员包括静态成员变量和静态成员函数。 用静态成员可以变量实现多个对象之间的数据共享,比全局变量更安全性。 用 static 关键字把类的成员变量声明为静态,表示它在程序中(不仅是对象)是共享的。 静态成员变量不会在创建对象的时候初始化,必须在程序的全局区用代码清晰的初始化(用范围解 阅读全文
posted @ 2023-02-12 17:03 jinganglang567 阅读(38) 评论(0) 推荐(0)
摘要:const修饰成员函数 在类的成员函数后面加const关键字,表示在成员函数中保证不会修改调用对象的成员变量。 注意: 1)mutable可以突破const的限制,被mutable修饰的成员变量,将永远处于可变的状态,在const修饰的函数中,mutable成员也可以被修改。 2)非const成员函 阅读全文
posted @ 2023-02-12 15:23 jinganglang567 阅读(52) 评论(0) 推荐(0)
摘要:初始化列表 构造函数的执行可以分成两个阶段:初始化阶段和计算阶段(初始化阶段先于计算阶段)。 l 初始化阶段:全部的成员都会在初始化阶段初始化。 l 计算阶段:一般是指用于执行构造函数体内的赋值操作。 构造函数除了参数列表和函数体之外,还可以有初始化列表。 初始化列表的语法: 类名(形参列表):成员 阅读全文
posted @ 2023-02-12 15:19 jinganglang567 阅读(111) 评论(0) 推荐(0)
摘要:拷贝构造函数 用一个已存在的对象创建新的对象,不会调用(普通)构造函数,而是调用拷贝构造函数。 如果类中没有定义拷贝构造函数,编译器将提供一个拷贝构造函数,它的功能是把已存在对象的成员变量赋值给新对象的成员变量。 用一个已存在的对象创建新的对象语法: 类名 新对象名(已存在的对象名); 类名 新对象 阅读全文
posted @ 2023-02-12 14:37 jinganglang567 阅读(40) 评论(0) 推荐(0)
摘要:构造函数和析构函数 **构造函数:**在创建对象时,自动的进行初始化工作。 **析构函数:**在销毁对象前,自动的完成清理工作。 1)构造函数 语法:类名(){......} l 访问权限必须是public。 l 函数名必须与类名相同。 l 没有返回值,不写void。 l 可以有参数,可以重载,可以 阅读全文
posted @ 2023-02-12 11:01 jinganglang567 阅读(66) 评论(0) 推荐(0)
摘要:使用类 1)类的成员函数可以直接访问该类其它的成员函数(可以递归)。 2)类的成员函数可以重载,可以使用默认参数。 3)类指针的用法与结构体指针用法相同。 4)类的成员可以是任意数据类型(类中枚举)。 5)可以为类的成员指定缺省值(C++11标准)。 6)类可以创建对象数组,就像结构体数组一样。 7 阅读全文
posted @ 2023-02-12 10:50 jinganglang567 阅读(23) 评论(0) 推荐(0)
摘要:类的访问权限 类的成员有三种访问权限:public、private和protected,分别表示公有的、私有的和受保护的。 在类的内部(类的成员函数中),无论成员被声明为 public还是private,都可以访问。 在类的外部(定义类的代码之外),只能访问public成员,不能访问 private 阅读全文
posted @ 2023-02-12 10:36 jinganglang567 阅读(221) 评论(0) 推荐(0)
摘要:内联函数 C++将内联函数的代码组合到程序中,可以提高程序运行的速度。 语法:在函数声明和定义前加上关键字inline。 通常的做法是将函数声明和定义写在一起。 注意: l 内联函数节省时间,但消耗内存。 l 如果函数过大,编译器可能不将其作为内联函数。 l 内联函数不能递归。 阅读全文
posted @ 2023-02-12 10:29 jinganglang567 阅读(27) 评论(0) 推荐(0)