c++
文章平均质量分 65
超勇小马
这个作者很懒,什么都没留下…
展开
-
无线锁的实现
/原子的比较*this和expected的对象表示(c++20前)值表示(C++20起),而若它们逐位相等,则以desired替换前者(进行读修改写操作)。否则,将*this中的实际值加载进expected(进行加载操作)。避免加锁时 从用户态切换到内核态的消耗 使用原子操作来实现互斥性。原创 2022-11-04 09:28:16 · 122 阅读 · 1 评论 -
多线程和互斥量
joinable():检查std::thread对象是否标识活跃的执行线程。注意进入此方法前,必须得到lock,wait(lock)退出后也会重新获得它,即能以lock为对pred()访问的保障。:是同步原语,能用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知condition_variable。原创 2022-11-01 09:46:26 · 470 阅读 · 0 评论 -
动态内存与智能指针
若 p.reset(q) 传递了可选的参数内置指针q,会令p指向q,否则会将p置为 p.reset(p.d) 空。make_shared(args) 返回一个shared_ptr,指向一个动态分配的类型为T的对象。shared_ptrp(q) p是shared_ptr q的拷贝;原创 2022-10-26 18:09:03 · 584 阅读 · 0 评论 -
STL容器----vector\array\map\set
/先构造无名对象(将亡值) 再拷贝进入iva。for(auto& x:iset) //set中没有重复的关键码,如果插入时是重复的就舍弃掉。//map容器的equal_range()返回不小于键值34和大于34的第一个值的迭代器。[4]将"祖父节点"设为"当前节点(红色节点)",即之后继续对"当前节点"进行操作。//一个指向首个不小于key的元素,另一个指向首个大于key的元素。(1)当前结点的祖父结点的另一个结点(叔叔节点)也是红色。//而第二个迭代器可换用upper_bound()获得。原创 2022-10-25 17:51:40 · 521 阅读 · 0 评论 -
模板函数2
Min(const char* const & a,const char* const & b) //没有泛化版本 就没有特化 //版本 为了特化T const char* 特化T const & 保留。void func(T&& x) //右值模板是一个未定义的模板 根据传入的实参确定 x并不是一个确定的 //右值引用。原创 2022-10-14 11:16:16 · 102 阅读 · 0 评论 -
#抛出异常\模板类
void funa() throw(std::bad_alloc,std::out_of_range) //限制抛出异常,如果抛出的异常不是括号中的异常,则程序直接终止。//try一个函数体执行,在该函数体执行期间,如果遇到异常throw一个异常,由catch接住处理,然后程序结束。//模板类型接收模板类型参数=>template//Array;//可以使用默认值的函数模板。原创 2022-10-13 15:32:50 · 93 阅读 · 0 评论 -
#函数模板
template// template //告诉编译器 不报错 作用域只对后面第一个函数起作用模板函数内部可以多写 template类模板和函数模板的定义和使用类似,我们已经进行了介绍。//实力化模板类后每个对象的静态成员都是单独的,只是同一个类模板共享一个静态成员。//函数模板在调用的时候,可以自动类型推导。类模板派生普通类_类模板派生类模板。类模板_类内核类外实现_类模板和友元。原创 2022-09-26 10:23:05 · 527 阅读 · 0 评论 -
纯虚函数与抽象类、关键字与四种类型转换
因为有虚函数的继承与派生类,就会在编译时产生一个虚表,在虚表的第一行有动态类型信息,里面记录了类型名、该类的基类与派生类信息。说明:dynamic_cast操作符,它允许在运行时刻进行类型转换,从而使程序能够在一个类层次结构中安全地转换类型,把基类指针转换成派生类指针,或把指向基类的左值转换成派生类的引用。2.dynamic_cast操作符可以用来把一个类类型对象的指针,转换成同一类层次结构中的其他类的指针,同时也可以用它把一个类类型对象的左值,转换成同一类层次结构中其他类的引用。原创 2022-09-23 16:37:40 · 267 阅读 · 0 评论 -
虚函数表,静态、动态联编
虚析构函数与构造函数能否为虚函数原创 2022-09-19 21:47:02 · 130 阅读 · 0 评论 -
友元、静态成员
c的static关键字:1.如果在局部函数内部声明,静态变量存储在.data区。静态函数相同,只能在当前文件使用。//A yes 因为静态属性在类的作用域中 可以访问私有。在类的成员函数中使用静态数据成员,静态数据成员之前没有this。注意:静态属性的类型是int,short,char,并且是const,可以在类中直接初始化。//定义 静态变量只能在类外被初始化一次。//可以在函数体内对静态变量赋值。原创 2022-09-15 23:43:49 · 76 阅读 · 0 评论 -
多重继承 多态
2.运行时的多态:运行时的多态性是指在程序执行前,无法根据函数名和参数来确定该调用哪一个函数,必须在程序执行过程中,根据执行的具体情况来动态地确定。对于相关的类型,确定它们之间的一些共同特征,(属性和方法),将共同特征被转移到基类中,然后在基类中,把这些共同的函数或者方法声明为公有的虚函数接口。客户端代码(操作函数)通过基类的引用或者指针来指向这些派生类型对象,对虚函数的调用会自动绑定到派生类对象上重写的虚函数。以类的虚成员函数为基础的运行时的多态性,是面向对象程序设计的标志性特征。原创 2022-09-15 17:51:55 · 219 阅读 · 0 评论 -
公有继承、私有继承、继承下的静态成员与友元函数
私有继承:要表示类之间“用.....来实现”的关系,可以选择是通过私有继承实现。//只有在公共继承下,才能成立两个语句,将Base对象中的Object的地址赋值。在基类与派生类中都设置友元函数,才能分别访问基类和派生类的私有成员,并不是在一个中设计,两者都能访问。私有继承在编码过程中就要指定具体的父类,其关系在编译期就确定,而组合的关系一般在运行时确定。在对象分析时明确具有“有一个”或“用.....来实现”关系,使用组合和私有继承。继承与静态成员,静态成员只有一个,所有对象共享(包括基类对象和派生类对象)原创 2022-09-11 19:17:57 · 196 阅读 · 0 评论 -
类的继承和不被继承与继承关系中的拷贝构造函数
3.程序设计者在基类和派生类中都定义了拷贝构造函数;程序设计者在派生类中,没有指定调用基类的拷贝构造函数时。c++编译器合成的代码调用基类的缺省构造函数,如果基类中没有缺省构造函数,合成代码失败。1.程序设计在基类和派生类中都没有定义拷贝构造函数;在派生类的拷贝构造函数的初始化列表中,加入基类拷贝构造函数的调用,是c++编译器合成的代码。将会在派生类中自动产生按位拷贝的拷贝构造函数。并合成代码,调用基类的拷贝构造函数。实现一个能被继承的类型,但是不能在外部函数中创建的对象类型。实现一个不能被继承的类型。原创 2022-09-08 14:14:45 · 318 阅读 · 0 评论 -
模板与继承
2.可以将一个派生类中的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员,同样也不能反过来做。1.派生类对象可以赋值给基类的对象,这时是把派生类对象从对应基类中继承来的隐藏对象赋值给基类对象。//将A的对象a设置为私有属性,只能直接访问其中的公有属性,与继承的基类可访问其中保护属性不同。引用是别名,但是这个别名只能包含派生类对象中的由基类继承来的隐藏对象。当派生类和基类属性同名时,派生类方法优先访问派生类的属性,如果需要使基类属性,如下。原创 2022-09-07 23:07:50 · 136 阅读 · 0 评论 -
开发一个可应用于多个软件的文件加密模块
读取源文件,加密,保存加密后原文件,其中读取保存文件使用流来实现,加密操作通过求模运算实现。将这三个操作的业务代码封装在三个不同的类中。feof(fp)) 文件末尾。cout原创 2022-09-06 17:04:52 · 302 阅读 · 0 评论 -
对象与对象之间的关系
是一种静态、天然、直觉的结构,是一种强关联,比如学校和学生,老师和课程,一对多,一对一,多对多的关联关系,与依赖不同,是一种非临时的关系。与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并随着运行时的变化;//以指针为成员属性时,circle析构时,point对象并没有析构,为整合关系。整体和部分的关系,整体由部分构成,但是整体和部分的生存期控制,整体不存在了,部分仍然存在,比如圆和点。// 此时是将课程赋值给pc引用的对象,并没有更改pc指向的对象,所以是强关联。Course* pc;原创 2022-09-06 13:29:39 · 525 阅读 · 0 评论 -
#友元函数
友元声明以关键字friend开头,它只能出现在类的声明中,它们不受其在类体中的public private protected区的影响。//不可以 ,因为静态成员方法与普通成员函数方法最大区别就是没有this指针。static void fun(Object &obj) //这样设计可以访问对象的非静态成员属性。2.不具有传递性:A是B的友元,B是C的友元,但A不是C的友元。友元friend机制允许一个类授权其他的函数访问它的非公有成员。1.不具有对称性:A是B的友元,并不意味着B是A的友元。原创 2022-09-06 09:44:13 · 684 阅读 · 0 评论 -
MyString的继续构造
【代码】MyString的继续构造。原创 2022-09-04 22:56:37 · 88 阅读 · 0 评论 -
Mystring的设计
Mystring原创 2022-09-04 08:08:51 · 157 阅读 · 0 评论 -
赋值运算符
深赋值和赋值运算法原创 2022-07-27 17:23:05 · 162 阅读 · 0 评论 -
运算符的重载
运算符的重载原创 2022-07-21 13:05:52 · 387 阅读 · 0 评论 -
浅拷贝与深拷贝
深拷贝与浅拷贝原创 2022-07-20 20:14:35 · 103 阅读 · 0 评论 -
拷贝构造函数
浅拷贝与类类型作为形参和返回值原创 2022-07-19 19:18:01 · 285 阅读 · 0 评论 -
实现整型栈
用面向对象的方法实现一个整型栈原创 2022-07-18 17:57:15 · 111 阅读 · 0 评论 -
#对象成员方法的使用
成员方法总结原创 2022-07-18 18:10:51 · 137 阅读 · 0 评论 -
#析构函数
析构函数原创 2022-07-15 20:08:15 · 318 阅读 · 0 评论 -
#面向对象
对象:状态和行为是对象的主要属性:1. 对象的状态又称为对象的静态属性,主要指对象内部所包含的各种信息,也就是变量。每个对象个体都有自己专有的内部变量,这些变量的值标明了对象所处的状态。2.对象的方法(行为)一方面把对象内部变量包裹,封装,保护起来,使得只有对象自己的方法才能操作对象内部变量,另一方面,对象的方法还是对象与外部环境和其他对象交互、通信的接口,其他对象或外部环境可以通过这个接口来调用对象的方法,操纵对象的行为和改变对象的状态。类型设计与实例化对象封装是面向对象程序设计原创 2022-06-05 20:42:19 · 80 阅读 · 0 评论 -
##空指针
与C对比:C中的空指针为NULL C++中的空指针则定义为宏#define NULL 0原创 2022-05-29 19:52:16 · 233 阅读 · 0 评论 -
##C11
autoauto的用法,可以根据变量值,推出变量类型,其中比较特殊的就是cosnt引用用法int main(){ const int a=10; auto x=a;// x int auto& y=a; //auto就是const int & 类型} 错误用法:auto&y=a,u=a; //这个时候u就不能编译通过,必须是 auto& y=a,&u =a;c++真的需要对内存,cpu,缓存应...原创 2022-05-24 20:31:16 · 71 阅读 · 0 评论 -
#函数模板 new 名字空间域
概念:为了代码复用;通用的代码不必受数据类型的限制。那么我们可以把数据类型改为一个设计参数。函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计。函数模板定义如下:template<模板参数表>返回类型 函数名(形式参数表){ .......;//函数体}template<class T>T my_max(T a,T b){ return a>b?a:b;}int main()...原创 2022-05-23 20:25:26 · 153 阅读 · 0 评论 -
#### 缺省函数
缺省参数指在定义函数时为形参指定的缺省值#include<stdio.h>void fun(int a,int b=0,int c=0,int d=0){ printf("a=%d b=%d c=%d d=%d\n",ab,c,d);}int main(){ fun(1,2,3,4); fun(1,2,3); fun(1,2); fun(1); return 0;}给形参赋值缺省值时必须从右向左赋值,不能跳着赋值。 赋值后 在输入实参时,从左向右赋值原创 2022-05-22 20:20:18 · 241 阅读 · 0 评论