C++
文章平均质量分 69
C++
Frank Castle
这个作者很懒,什么都没留下…
展开
-
【c/c++】c和cpp混合编译
在这段代码中,#ifdef __cplusplus 和 #endif 之间的代码是为了在 C++ 中使用 C 语言的函数声明和定义时,确保编译器正确地处理 C 和 C++ 之间的语法差异。这是因为 C 和 C++ 有一些不同之处,包括函数名的重载、类型转换等。在这段代码中,extern “C” 是一个 C++ 的特性,它告诉编译器要按照 C 的方式来处理其中的函数。:这个条件编译指令检查是否正在编译 C++ 代码。__cplusplus 是一个宏,当编译器编译 C++ 代码时,它会被定义。原创 2023-09-01 18:58:41 · 3309 阅读 · 1 评论 -
【设计模式】 策略模式
(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,使它们可以相互替换,让客户端代码和算法的具体实现解耦。这样,客户端可以根据不同的需求选择不同的算法,而无需修改原有的代码。原创 2023-07-30 12:24:43 · 745 阅读 · 0 评论 -
【设计模式】简单工厂模式
工厂模式是一种灵活且可扩展的设计模式,它通过封装对象的创建过程,帮助我们降低代码的耦合度,并支持系统的扩展和维护。然而,工厂模式也有一些局限性,例如增加了类的数量和抽象性,可能会增加代码的复杂性和理解难度。:如果需要添加新类型的产品(图形),只需要添加一个新的产品类和对应的工厂方法即可,不需要修改现有代码,符合开闭原则。:客户端只需与抽象产品和抽象工厂进行交互,不关心具体的产品类和工厂类,隐藏了产品对象的具体实现。:每个具体产品都需要一个对应的具体工厂类,如果产品较多,会增加类的数量,增加系统复杂性。原创 2023-07-30 10:37:17 · 663 阅读 · 0 评论 -
C语言-------i++和++i的区别
i++和++i的区别原创 2023-04-30 19:33:16 · 3017 阅读 · 1 评论 -
替换字符串中出现的某段字符串的C语言和C++实现方式
字符串替换原创 2023-04-28 22:56:10 · 665 阅读 · 0 评论 -
clang-tidy
clang-tidy 使用翻译 2022-10-16 15:53:02 · 4344 阅读 · 0 评论 -
STL(Standard Template Library)标准模板库
STL(Standard Template Library)标准模板库组件描述容器(Containers)管理某一类对象的集合。各种数据结构,如:deque、list、vector、map 等。算法(Algorithms)作用于容器。各种算法,如:sort、find、copy、for_each等迭代器(iterators)用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。容器和算法的交流通过迭代器。仿函数行为类似函数,可作为算法的某种策略。重载的原创 2020-11-01 16:02:49 · 262 阅读 · 0 评论 -
继承与派生
继承与派生派生的过程:吸收基类数据成员,成员函数改造基类成员,设置新的访问权限加入派生类新成员定义派生类构造析构函数(构造析构函数不能从基类继承)权限访问1.基类的private成员(1)无论是哪种继承方式,基类的私有成员都是只有基类的成员函数和其友元才能访问。(2)派生类的成员函数不能访问基类的private成员。(3)派生类的对象也不能访问基类的private成员。2. 基类的public和protected成员根据派生类的继承方式决定该成员在派生类中的访问级别。#in原创 2020-10-12 19:27:34 · 180 阅读 · 0 评论 -
运算符重载
运算符重载不能重载的运算符(4个带点的+1个sizeof)..*::?:sizeof重载操作符的两种形式类的成员函数成员函数有一个隐含的this形参,限定其为第一个操作数。作为成员重载的操作符,要求访问重载函数的第一个操作数必须为该类的对象。Complex c3 = c1 + c2;==》Complex c3 = c1.operator+(c2);++i;//左值,对象& operator ++ (){ //++ return *this;}i++;//右值原创 2020-10-07 22:29:29 · 281 阅读 · 0 评论 -
类的静态成员&友元函数
类的静态成员静态数据成员(有作用域的全局变量,编译时确定段和相对地址在哪(在目标文件中,section,程序运行时加载到内存中,根据编译时确定的段和相对地址分配内存,变成segment),即使不定义对象,也为static数据成员分配空间)静态成员可以是私有或者公有多个对象之间的数据共享,它与类相关联,而不是与类的对象相关联。静态数据成员只有一个,供所有对象共用。必须在类定义体外部定义,且在定义时必须初始化。#include <iostream>using namespace原创 2020-10-07 15:24:24 · 416 阅读 · 0 评论 -
Time类,简单计时器
#include <iostream>#include <unistd.h>using namespace std;class Time{ public: void set_time( ); void start_time(); void show_time( ); void add_a_sec(); void add_a_minute(); void add_a_hour(); void add_seconds(int); void add原创 2020-10-06 12:46:44 · 266 阅读 · 0 评论 -
内嵌对象
Circle类中包含有Point类的对象成员表示圆心。类包含对象成员的时候,类的构造函数要实现对象成员的初始化。在建立Circle类的对象时调用Point类的构造函数:如果Point类有定义默认构造函数,在执行Circle类的构造函数体之前,内嵌对象成员center自动调用Point类的默认构造函数进行初始化。如果Point类没有定义默认构造函数,则必须使用初始化列表的方式指定初始化式来初始化内嵌对象成员center。#include <iostream>#inclu原创 2020-10-05 21:45:30 · 2510 阅读 · 0 评论 -
类的构造与析构
类的构造与析构默认构造函数()创建对象时自动调用if 类中没有定义任何一个构造函数 编译器会自动合成一个默认构造函数else 写了构造函数 编译器不会合成一个默认的构造函数if 定义了不带参数或各参数均有默认值的构造函数 C++编译器都认为其是默认的构造函数。//1Student(void){ m_age = 0; m_sex = ‘m’;}//2Student(int age = 0, char sex = ‘m’, string name = “”){原创 2020-10-05 19:34:40 · 546 阅读 · 0 评论 -
基础知识&左值&this指针
左值代表着一块可以被更新的内存区域,可以被取地址,右值不能被取地址。内存泄漏是调用了malloc/new等内存申请操作,但是缺少对应的free/delete来释放内存。类的定义不会引起数据的内存分配,实例化对象才会给这个对象分配存储空间。(类对象所占的存储空间等于它的数据成员所占的空间(不包含成员函数代码所占的空间),每个类对象都有自己的数据成员。)类的声明//定义两个类A和类B, 类A中有一个指向类B对象的指针,类B中有一个类A的对象。#include <stdio.h&g..原创 2020-10-05 14:14:04 · 576 阅读 · 1 评论 -
权限继承关系&访问
能否访问判断流程:先确定是类内还是类外类外只要直接访问private,protected,全部不能,权限不够原创 2020-09-10 11:53:59 · 247 阅读 · 0 评论 -
菱形继承&多态(重载,重写)&纯虚函数&虚析构和纯虚析构
继承当菱形继承时,两个父类拥有相同的数据,需要加作用域区分。菱形继承带来的主要问题是子类继承两份相同的数据导致资源浪费。利用虚继承可以解决菱形继承问题。多态静态多态(地址早绑定,在编译阶段确定函数地址)函数重载-----(**1.**返回值可同可不同,仅返回值不同不算重载 **2.**函数名必须相同 3.参数列表不同,包括个数不同,类型不同,参数排列顺序不同++++重载的函数经过编译器处理重新命名本质上还是不同的函数 ,占用不同的内存和入口地址++++)------ 和 运算符重载,复用原创 2020-09-03 00:27:37 · 626 阅读 · 0 评论 -
引用&指针&const
malloc 和new 的区别mallocnew属性C库函数C++运算符返回类型失败返回NULL,成功返回申请内存的首地址void*类型(需要强制类型转换)失败抛出异常bad_alloc,成功返回对象类型的指针内存分配需要显式指定内存分配的字节数编译器根据类型,自动分配对象大小的内存空间(会调用malloc),自动调用类对象的构造函数,对类对象进行初始化释放内存freedelete—调用类的析构函数,调用operator delete函数,调用f.原创 2020-08-18 00:39:10 · 318 阅读 · 0 评论 -
模板
类模板数组栈#include <iostream>using namespace std;template <class T, int Size = 16>class Mystack{private: T a[Size]; int top;public: //默认构造函数 Mystack():top(-1){} //赋值构造函数 Mystack(const Mystack& other){ top = other.top; i原创 2020-08-17 17:50:27 · 187 阅读 · 0 评论 -
赋值运算符重载函数要点
赋值运算符重载函数要点是否把返回值的类型声明位该类型的引用---------&未加引用不能连续赋值是否把传入参数的类型声明为常量引用---------const------&未加引用,从形参到实参会调用一次复制构造函数,造成无谓消耗赋值运算符函数内不会改变传入的实例的状态,要给传入的引用参数加上关键字const是否释放实例自身已有的内存---------delete没有释放内存,会造成内存泄漏是否判断传入参数和自身(*this)是不是同一个实例------原创 2020-08-15 11:19:33 · 240 阅读 · 0 评论 -
自定义简单string类&成员函数指针&对象数组初始化
目录必须使用初始化列表初始化的数据类型各种创建类对象的区别,调用函数的不同**复制构造函数**和**赋值操作符重载函数**自定义类string成员函数指针的定义与使用对象数组的初始化类中内嵌对象数组成员,对数组成员进行初始化必须使用初始化列表初始化的数据类型const成员引用成员无默认构造函数的内嵌对象成员各种创建类对象的区别,调用函数的不同创建类对象:===》调用构造函数类名 对象名; ===》调用默认的构造函数 ===》调用无参构造函数 或者 调用带参数但是参数设有默认值原创 2020-08-10 21:15:13 · 498 阅读 · 0 评论 -
类外定义
#include <iostream>using namespace std;class Doc{typedef int count_t; private: string name; string path; string date; count_t count; public: void set原创 2020-08-06 20:11:44 · 514 阅读 · 0 评论