![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程语言
jack学编程
这个作者很懒,什么都没留下…
展开
-
大话数据结构之二叉搜索树
大话数据结构之二叉搜索树的c++实现原创 2023-01-11 15:35:39 · 163 阅读 · 0 评论 -
大话数据结构之二叉树c++实现
程杰 大话数据结构之二叉树c++实现原创 2022-12-21 17:42:48 · 180 阅读 · 0 评论 -
c++文件操作
c++文件操作基础知识原创 2022-10-22 22:39:36 · 901 阅读 · 0 评论 -
c++11并发与多线程
第五节 互斥量概念、用法、死锁演示及解决详解(1)互斥量(mutex)的基本概念(2)互斥量的用法(2.1)lock(),unlock()(2.2)std::lock_guard类模板(3)死锁(3.1)死锁演示(3.2)死锁的一般解决方案(3.3)std::lock()函数模板(3.4)std::lock_guard的std::adopt_lock参数第六节 unique_lock详解(1)unique_lock取代lock_guardunique_lock是一个类模板,工作中原创 2021-11-07 22:57:18 · 565 阅读 · 0 评论 -
来探一探C++的引用
这里写目录标题创建引用变量引用用作函数参数按值传递与按引用传递使用const的理由引用用作类对象何时使用引用参数创建引用变量1. 引用是已定义变量的别名(另一个名称)。 定义引用的一般格式:类型 &引用名 = 变量名; 例如:int a = 1; int &ra = a; // b是a的别名,因此a和b是同一个单元 注意:定义引用时一定要初始化,指明该引用变量是谁的别名。 2. 引用的主要用途: 2.1 用作函数的形参(主要指结构和对象参数)。通原创 2021-07-30 15:51:19 · 82 阅读 · 0 评论 -
虚函数与多态(二)
这里写目录标题纯虚函数抽象类演示第5条多态虚析构函数纯虚函数1.虚函数是实现多态性的前提 1.1需要在基类中定义共同的接口 1.2接口要定义为虚函数2.如果基类的接口没办法实现怎么办? 如形状类Shape3解决办法 将这些接口定义为纯虚函数抽象类1.在基类中不能给出有意义的虚函数定义,这时可以把它说明成纯虚函数,把它的定义留给派生类来做2.定义纯虚函数: class 类名{ virtual 返回值类型 函数名(参数表) = 0;};3.纯虚函数不需实现。4.作用原创 2021-07-26 22:46:02 · 113 阅读 · 0 评论 -
虚函数与多态(一)
这里写目录标题多态静态绑定与动态绑定虚函数虚析构函数虚表指针基类派生类object slicing与虚函数overload、override、overwrite多态1.多态性是面对对象程序设计的重要特征之一。2.多态性是指发出同样的消息被不同类型的对象接收时可能导致完全不同的行为。3.多态的实现: 3.1函数重载 3.2运算符重载 3.3模板 3.4虚函数静态绑定与动态绑定1.静态绑定 绑定过程出现在编译阶段,在编译期就已经确定要调用的函数。 2.动态绑定 绑定过程工作在程原创 2021-07-26 21:28:05 · 212 阅读 · 0 评论 -
虚继承对C++对象内存模型造成的影响
这里写目录标题回顾类/对象大小计算虚基类表回顾类/对象大小计算虚基类表1.virtual base table 1.1本类地址与虚基类表指针地址的差 1.2虚基类地址与虚基类表指针地址的差 2.virtual base table pointer(vbptr)#include <iostream>using namespace std;class BB{public: int bb_;};class B2 : virtual public BB{pub原创 2021-07-26 20:25:58 · 169 阅读 · 2 评论 -
继承(二)
目录转换与继承派生类到基类的转换基类到派生类的转换多重继承虚继承与虚基类虚基类及其派生类构造函数转换与继承派生类对象也是基类对象。这意味着在使用基类的地方可以用派生类来替换。派生类到基类的转换1.当派生类以public方式继承基类时,编译器可自动执行的转换(向上转换upcasting安全转换) 1.1 派生类对象指针自动转化为基类对象指针 1.2 派生类对象引用自动转化为基类对象引用 1.3 派生类对象自动转化为基类对象(特有的成员消失) 2.当派生类以private/protected原创 2021-07-26 19:23:20 · 90 阅读 · 0 评论 -
继承(一)
目录代码重用继承公有、私有、保护继承默认继承保护级别接口继承与实现继承继承与重定义继承与组合不能自动继承的成员函数继承与构造函数友元关系与继承静态成员与继承代码重用C++很重要的一个特征就是代码重用。在C语言中重用代码的方式是拷贝代码、修改代码。C++中可以用继承或组合的方式来重用。通过继承或组合现有的类来创建新类,而不是重新创建它们。继承1.继承是使用已经编写好的类来创建新类,新的类具有原有类的所有属性和操作,也可以在原有类的基础上做一些修改和增补。2.新类称为派生类或子类,原有类称为基类或原创 2021-07-25 22:05:42 · 112 阅读 · 0 评论 -
运算符重载(二)
目录++运算符重载前置++运算符重载后置自增和后置自减的重载!运算符重载赋值运算符重载++运算符重载前置++运算符重载1.成员函数的方式重载,原型为: 函数原型 & operator ++(); 2.友元函数的方式重载,原型为: friend 函数原型 & operator ++(类类型 &);后置自增和后置自减的重载1.成员函数的方式重载,原型为: 函数原型 operator ++(int); 2.友元函数的方式重载,原型为: friend 函数原型原创 2021-07-25 17:49:08 · 71 阅读 · 0 评论 -
运算符重载(一)---成员/非成员函数重载
目录运算符重载成员函数重载Complex.hComplex.cppmain非成员函数重载Complex.hComplex.cpp运算符重载规则运算符重载1.运算符重载允许把标准运算符(如+、-、*、/、>等)应用于自定义数据类型的对象2.直观自然,可以提高程序的可读性3.体现了C++的可扩充性4.运算符重载仅仅只是语法上的方便,它是函数调用的方式5.运算符重载,本质上是函数重载6.不要滥用重载、因为它只是语法上的方便,所以只有在涉及的代码更容易写、尤其是更易读时才有必要重载。转载 2021-07-24 09:33:48 · 1256 阅读 · 0 评论 -
对象的使用(三)---mutable/const对象/const成员函数
目录const成员函数const对象mutableconst汇总const成员函数1.const 成员函数不会修改对象的状态2.const成员函数只能访问数据成员的值,而不能修改它const对象1.如果把一个对象指定为const,就是告诉编译器不要修改它2.const对象的定义 2.1const 类名 对象名(参数表); 3.const对象不能调用非const成员函数mutable用mutable修饰的数据成员即使在const对象或在const成员函数中都可以被修改。#in原创 2021-07-24 08:35:44 · 186 阅读 · 0 评论 -
static与单例模式
目录static与单例模式演示1演示2线程安全的单例模式类的实现static与单例模式1.保证一个类只有一个实例,并提供一个全局访问点2.禁止拷贝演示1#include <iostream>using namespace std;class Singleton{public: static Singleton* GetInstance() { if (instance_ == NULL) { instance_ = new Singleton; }原创 2021-07-24 08:06:12 · 269 阅读 · 0 评论 -
对象的使用(二)---static关键字
目录static函数用法四种对象的作用域与生存期static用法总结演示2(internal linkage)演示2(external linkage)演示static函数用法#include <iostream>using namespace std;class Date{public: Date(int year) : year_(year) { } static bool IsLeapYear(int year) { return (year % 4 ==原创 2021-07-24 00:43:21 · 74 阅读 · 0 评论 -
对象的使用(一)---static关键字
目录static成员演示第1条CountedObject.hCountedObject.cppmain演示第6条static成员函数类/对象大小计算static成员1.对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量。比如说统计某种类型对象已创建的数量。2.如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,这时我们可以用类的静态成员来解决这个问题。3.非static数据成员存在于类类型的每个对象中,static数据成员独立该类的任意对象存在,它是与类关联的对象,不原创 2021-07-23 23:14:42 · 141 阅读 · 0 评论 -
构造函数与析构函数(四)---深拷贝与浅拷贝
目录深拷贝与浅拷贝浅拷贝String.hString.cppmain深拷贝String.hString.cppmain赋值操作深拷贝String.hString.cppmain禁止拷贝空类默认产生的成员深拷贝与浅拷贝浅拷贝String.h#ifndef _STRING_H#define _STRING_Hclass String{public: String(const char* str = nullptr); ~String(); void Display();private原创 2021-07-23 22:19:11 · 215 阅读 · 0 评论 -
构造函数与析构函数(三)---构造函数
目录构造函数初始化列表对象成员及其初始化const成员、引用成员初始化枚举拷贝构造函数拷贝构造函数调用的几种情况构造函数初始化列表1.推荐在构造函数初始化列表中进行初始化2.构造函数的执行分为两个阶段 2.1 初始化段 2.2 普通计算段对象成员及其初始化#include <iostream>using namespace std;class Object{public: Object(int num) : num_(num) { cout << "原创 2021-07-23 20:50:49 · 117 阅读 · 0 评论 -
构造函数与析构函数(二)
目录头文件Test.h实现文件Test.cpp转换构造函数赋值与初始化区别explicit头文件Test.h#pragma onceclass Test{public: Test(); Test(int num); ~Test(); void Display(); Test& operator=(const Test& other);private: int num_;};实现文件Test.cpp#include "Test.h"#include &原创 2021-07-23 16:45:13 · 79 阅读 · 0 评论 -
构造函数与析构函数(一)
目录头文件Test.h实现文件Test.cpp构造函数默认构造函数重载构造函数构造函数与new运算符newnew operatoroperator new全局对象的构造先于main函数析构造函数析构函数与数组析构函数与delete运算符析构函数可以显示调用头文件Test.h#pragma onceclass Test{public: Test(); Test(int num); ~Test(); void Display();private: int num_;};实现文件原创 2021-07-23 15:55:31 · 116 阅读 · 0 评论 -
异常(一)
目录自定义类型异常异常捕获注意问题类比自定义类型异常#include <iostream>#include <string>using namespace std;class MyException{public: MyException(const char *message) : message_(message) { cout << "MyException..." << endl; } MyException(const原创 2021-07-09 10:47:25 · 81 阅读 · 1 评论 -
boost智能指针
目录scoped_ptrshared_ptrshared_ptr与STL循环引用解决办法(打破循环引用)1 手动打破循环引用2 弱引用weak_ptrscoped_array/shared_arrayscoped_ptr代码:#include <iostream>#include <boost/scoped_ptr.hpp>using namespace std;class X{public: X() { cout << "X..." <<原创 2021-07-08 22:32:39 · 243 阅读 · 2 评论 -
C/C++语言--类与对象(二)
目录作用域类作用域前向声明嵌套类局部类作用域1.块作用域2.文件作用域3.函数原型作用域4.函数作用域5.类作用域类作用域1.每个类都定义了自己的作用域称为类作用域。2.类作用域中说明的标识符只在类中可见。前向声明1.C++中类必须先定义,才能够实例化。2.两个类需要相互作用形成一个"环形"引用是,无法先定义使用。这事就需要用到前向声明。3.前向声明的类不能实例化。嵌套类1.外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实原创 2021-06-23 21:08:58 · 64 阅读 · 2 评论 -
C++语言--类与对象(一)
目录类声明公有、私有、保护成员数据抽象和封装内联成员函数内联函数内联函数与带参数宏的区别新的类型转换运算符成员函数的重载及其缺省参数类与结构体隐含的this指针类声明公有、私有、保护成员1.在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。2.在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。3.在关键字protected后面声明,与private类似,其差别表现在继承与派生时对派生类的影响不同。数据抽象和封装内原创 2021-06-23 20:55:04 · 353 阅读 · 0 评论 -
C/C++语言--const与#define
目录const 限定符const与#defineconst 限定符1.用const给字面常量起个名字(标识符),这个标识符就称为标识符常量;因为标识符常量的声明和使用形式很像变量,所以也称常变量2.定义的一般形式: 2.1const 数据类型 常量名 = 常量值; 2.2数据类型 const 常量名 = 常量值;3.例如: const float PI = 3.14159f;4.注意事项: 常变量在定义时必须初始化; 常变量初始化之后,不允许在被赋值;// 演示const限定符in原创 2021-06-22 16:03:13 · 150 阅读 · 0 评论 -
C/C++语言--指针和引用的关系
目录引用const引用引用传递引用作为函数的返回值引用和指针的区别其他引用1.引用是给一个变量起别名2.定义引用的一般格式: 类型 &引用名 = 变量名; 例如:int a = 1; int &b = a; // b是a的别名,因此a和b是同一个单元 注意:定义引用时一定要初始化,指明该引用变量是谁的别名。3.在实际应用中,引用一般用作参数传递与返回值。const引用const引用是指向const对象的引用const int ival = 1024;const原创 2021-06-22 12:35:37 · 188 阅读 · 0 评论