- 博客(65)
- 收藏
- 关注
原创 模板-函数模板基本语法
函数模板的定义与普通函数类似,但在函数名后面要紧跟模板参数列表的定义。// 函数体在函数体内,可以使用类型参数T来处理参数arg,例如可以对arg进行算术操作、函数调用等。
2024-07-25 11:53:29
165
原创 类与对象-多态-案例3-电脑组装具体实现
这种设计确保在派生类的对象销毁时,能够正确调用派生类的析构函数,从而释放对象占用的资源。方法中,通过调用这些指针的虚函数实现了动态绑定,从而根据实际对象类型调用正确的函数。在C++中,抽象类通过纯虚函数定义了接口,强制其派生类实现这些方法。函数中,创建了两台电脑,分别使用了不同厂商的组件对象,而后通过。,分别用于不同厂商的组件实现计算、图形显示和内存存储功能。来动态创建和销毁对象,避免了静态分配带来的限制。接受这些抽象基类指针,允许在运行时绑定具体的。安全释放了这些动态分配的内存,避免了内存泄漏。
2024-07-20 09:42:34
889
原创 类与对象-多态-虚析构和纯虚析构
public:// 基类的虚析构函数可以包含资源释放和其他清理操作public:// 纯虚析构函数声明// 纯虚析构函数的实现可以为空虚析构函数和纯虚析构函数是C++面向对象编程中非常重要的概念,它们不仅帮助管理资源,还确保在多态环境下正确地销毁对象。使用虚析构函数可以避免指针操作带来的潜在问题,而纯虚析构函数则进一步强化了类的抽象性和派生类的实现要求。在实际开发中,正确地使用这些析构函数形式是保证代码质量和扩展性的重要步骤。
2024-07-19 11:50:58
251
原创 类和对象-多态-纯虚函数和抽象类
纯虚函数(pure virtual function)是一个在基类中声明的虚函数,它没有函数体,只有声明。纯虚函数通过在函数声明的结尾处使用= 0来标识。纯虚函数的存在使得基类成为一个抽象类(abstract class),这意味着不能直接实例化该类,而只能用作其他类的基类,提供接口规范。
2024-07-17 21:57:17
295
原创 类与对象-多态-案例1-计算器类
是其派生类)的指针。这种方式可以方便地通过基类指针来管理和操作派生类对象,实现多态性和灵活性。类型的对象,而不是指针,这将导致类型不匹配的编译错误,因为。操作符用于直接访问对象的成员,而指针则是一个地址,需要使用。来访问它指向的对象的成员变量和成员函数。在面向对象的编程中,当使用指针访问对象时,必须使用。操作符来访问它所指向的对象的成员。类型的对象或其派生类的对象。的作用是声明一个指针变量。类或其派生类对象的指针。操作符是针对对象本身的,而。是一个指针,所以需要使用。是一个指针,需要使用。
2024-07-17 18:24:39
413
原创 类和对象-多态-多态的基本语法
当基类指针或引用指向派生类对象时,通过虚函数调用将会根据实际对象的类型来决定调用哪个版本的函数。如果函数不是虚函数,那么无论指针或引用的实际类型是什么,都只会调用基类的函数。而使用虚函数可以确保在通过基类指针或引用调用函数时,实际执行的是对象的派生类版本,从而确保了行为的多样性和灵活性。在调用虚函数时,程序会检查对象的实际类型,并决定调用哪个版本的函数。:通过基类的指针或引用来调用虚函数,这样可以在运行时确定实际调用的函数版本。这是动态多态的关键,因为它允许程序根据对象的实际类型来调用适当的函数。
2024-07-17 13:30:12
807
原创 类和对象-继承-菱形继承问题以及解决方法
Animal类作为基类,具有一个公共成员变量m_Age表示动物的年龄。Sheep和Tuo类分别继承自Animal,并且使用了虚继承。SheepTuo类同时继承了Sheep和Tuo类,形成了菱形继承的结构。
2024-07-17 00:09:29
431
原创 类和对象-继承-同名静态成员处理
静态成员属性和函数可以被子类重新定义和隐藏。通过对象或类名结合作用域解析运算符可以访问特定类中的静态成员。子类重新定义的同名静态成员会隐藏父类中的同名成员,但可以通过作用域解析访问父类中被隐藏的成员。
2024-07-16 16:27:38
423
原创 类和对象-继承-继承方式
在C++中,有三种主要的继承方式:公有继承(public inheritance)、私有继承(private inheritance)、保护继承(protected inheritance)。每种继承方式都有其特定的访问权限规则和使用场景。
2024-07-08 17:57:05
309
原创 类和对象-C++运算符重载-函数调用运算符重载
总结来说,匿名函数对象在实现简单的函数对象功能时非常方便,能够提高代码的可读性和简洁性,同时避免定义不必要的命名和额外的类对象。当一个函数对象只需要使用一次,没有必要为其命名,使用匿名函数对象可以避免定义额外的类或对象,减少代码量和复杂度。匿名函数对象的创建和使用可以在一行代码中完成,非常适合于简单的函数对象调用,不需要额外的命名和定义步骤。匿名函数对象可以在使用完毕后立即销毁,不会占用额外的命名空间,从而使代码更为简洁和清晰。匿名函数对象的使用的好处。
2024-07-08 00:27:44
264
原创 类和对象-C++运算符重载-赋值运算符重载
在C++中,进行内存管理时,特别是对动态分配的资源(如指针所指向的内存)进行释放时,最好先进行空指针判断,然后再释放指针指向的内存。然而,没有定义赋值运算符重载,这意味着默认的赋值操作符将会进行浅拷贝,即简单地复制指针而不是创建新的动态内存副本。在 C++ 中,当类中存在动态分配的资源时,需要特别注意赋值运算符的重载,确保进行适当的资源管理,避免出现内存泄漏或双重释放的问题。如果一个对象多次被赋值,而在每次赋值前没有释放之前分配的内存,就会造成内存泄漏。具体来说,在赋值运算符重载函数中,先判断。
2024-07-07 00:44:14
625
原创 类和对象-C++运算符重载-递增运算符重载
因此,为了允许对象的连续递增操作、提高性能、符合语言习惯和预期,重载前置递增运算符++应当返回对象类型的引用MyInteger&。这样做可以确保代码更加高效、清晰和符合 C++ 的编程习惯。对于代码MyInteger operator++(int),为什么不用地址引用呢在重载后置递增运算符的函数中,为什么不使用地址引用(即)而是使用对象值的方式()呢?后置递增运算符需要接受一个额外的int类型的参数,通常用来区分前置递增运算符和后置递增运算符的重载版本。
2024-07-06 22:58:08
375
原创 类和对象-C++运算符重载-左移运算符重载
返回引用而不是值的另一个原因是为了避免不必要的对象复制。如果每次<<运算符返回的是ostream对象而不是引用,那么在每次函数调用结束时会产生一个临时的ostream对象副本,这不仅效率低下,而且破坏了期望的输出顺序。因此,返回ostream&类型的引用是为了支持链式调用和流式输出的正确性和效率。这也是 C++ 中惯例和推荐的做法。为什么要将 m_A 和 m_B 私有化?将数据成员声明为私有的意味着它们只能被Person类的成员函数访问,而外部代码不能直接访问或修改这些成员。
2024-07-06 19:14:02
598
原创 入门2-分支结构
小 B 喜欢吃苹果。她现在有m1≤m≤100)个苹果,吃完一个苹果需要花费t0≤t≤100)分钟,吃完一个后立刻开始吃下一个。现在时间过去了s1≤s≤10000)分钟,请问她还有几个完整的苹果?
2024-05-05 20:55:23
1004
原创 类和对象-对象特性-this指针的用途
引入标准 C++ 库中的所有头文件,这样可以确保代码中使用的标准库中的功能都能够被正常引用。指针,它指向被调用的成员函数所属的对象,用于区分成员变量和形参等。函数中,演示了如何使用链式调用的方式调用成员函数。调用都会返回对象本身的引用,从而可以连续调用该成员函数。对象的年龄加到当前对象的年龄上,并返回对象本身的引用。:在构造函数中使用了成员初始化列表,通过。,用于初始化对象的年龄成员变量。输出对象的成员变量,例如。类中定义了一个构造函数。的值赋给对象的成员变量。:定义了一个成员函数。:在成员函数中使用了。
2024-04-23 11:52:31
304
原创 类和对象-对象特性-静态成员函数
静态成员函数不依赖于具体的对象实例,而是属于类本身,因此可以通过类名直接调用,也可以通过对象调用。静态成员函数的特点是只能访问静态成员变量和其他静态成员函数,不能直接访问非静态成员变量或非静态成员函数。类的静态成员变量,它属于类而不是类的对象。静态成员变量在内存中只有一份拷贝,被所有类的对象共享。静态成员变量必须在类外初始化,通常在类的实现文件中进行初始化。)成员函数,只能在类的内部访问,外部无法调用。,展示了如何通过对象来访问静态成员函数。)成员变量,可以被外部访问。,并调用对象的成员函数。
2024-04-21 00:45:59
249
原创 类和对象=对象特性-静态成员变量
静态成员变量属于整个类,而不是类的单个对象。在类内部声明静态成员变量,但是需要在类外部初始化。:与普通成员变量类似,静态成员变量也可以设置为私有(private)或者公有(public)。进行静态成员变量的初始化。静态成员变量只会被初始化一次,即使创建了多个类的对象。被声明为私有静态成员变量,因此无法在类外部直接访问,如。
2024-04-20 16:29:48
216
原创 入门1-顺序结构
使用 fixed 后,浮点数将以固定小数点的形式输出,小数点后的位数由 setprecision 函数设置。这种输出格式在需要保留特定位数的小数时非常有用,因为它可以确保输出结果的精度。在 C++ 中,fixed 是 头文件中定义的一个输出格式修饰符,用于设置浮点数的输出格式为固定小数点表示法。由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。,分别代表该时间的时和分。小时制下的时间,代表 yyy 最晚的出发时间。
2024-04-20 15:42:31
1186
原创 类和对象-对象特性-函数的分类以及调用
拷贝构造函数:用于在创建新对象时,以已有对象的值作为初始值。在本代码中,Person类中定义了拷贝构造函数,用于在创建p3和p6时,以p2和p5的值作为初始值。构造函数:在类中定义的函数,用于初始化对象的数据成员。在本代码中,Person类中定义了无参构造函数、有参构造函数和拷贝构造函数。析构函数:在对象销毁时自动调用,用于释放对象占用的资源。在本代码中,Person类中定义了析构函数,用于在对象销毁时输出一条信息。这段代码主要涉及了C++中的构造函数和拷贝构造函数的使用,以及对象的初始化方式。
2024-04-18 15:21:31
219
原创 类和对象-对象特性-构造函数和析构函数
析构函数的虚函数:如果一个类可能被其他类继承,那么应该将析构函数声明为虚函数,以确保在删除子类对象时能够正确调用父类的析构函数。析构函数的默认实现:如果没有显式定义析构函数,编译器会生成一个默认的析构函数,它什么也不做。析构函数的显式定义:如果需要在析构函数中进行资源的释放等操作,可以显式定义析构函数。析构函数的继承:如果一个类继承了另一个类,那么它的析构函数会自动调用父类的析构函数。析构函数的调用时机:当对象的生命周期结束时,即对象被销毁时,析构函数会自动调用。
2024-04-17 23:58:37
249
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人