C++
维欣~
这个作者很懒,什么都没留下…
展开
-
【C++】运算符重载——复数类
CComplex类class CComplex{public: CComplex(int real, int image) :mreal(real), mimage(image) {} private: int mreal;//实部 int mimage;//虚部};int main(){ CComplex c1(10, 20); CComplex c2 = c1 + 10; CComplex c3 = 10 + c1; CComplex c4 = c1 + c2;原创 2020-07-16 11:32:21 · 2225 阅读 · 0 评论 -
【C++】运算符重载——整形类
CInt类class CInt{public: CInt(int val) :mvalue(val) {}private: int mvalue;};int main(){ int arr[] = { 1, 321, 4, 3, 54, 7 }; int len = sizeof(arr) / sizeof(arr[0]); for (CInt i = 0; i < len; i++) { std::cout << arr[i] << "原创 2020-07-16 10:56:12 · 461 阅读 · 0 评论 -
【C++】详细解读:typename声明模板中的一个类型
用C++封装一个不带头结点的单链表要求:用嵌套类型的方式template<typename T>class CLink//模板{public: CLink() { phead = NULL; } ~CLink() { Node* pCur = phead; Node* pNext; while (pCur != NULL) { pNext = pCur->pnext; delete pCur; pCur = pNext; }原创 2020-07-14 13:50:58 · 355 阅读 · 0 评论 -
【C++】用vector容器封装顺序表(完整代码)
完整代码#include<iostream>template<typename T>class Vector{public: Vector(int size = 2) { parr = new T[size]();//动态开辟空间 cursize = 0; totalsize = size; } ~Vector() { delete[] parr; parr = NULL; } //扩容 void resize() { T*原创 2020-07-13 22:25:38 · 448 阅读 · 0 评论 -
【C++】函数模板相关内容
先考虑一个问题写一个代码,两个数相加,要求在任何形式下都能通用方法一:宏 #define在预编译阶段处理,相当于文本替换但是它没有类型检查和安全检查。方法二:C泛型void*void*是半开半闭的区间,非常容易越界方法三:函数重载我们考虑到可以用以下形式,可以将类型进行列举,但是类型分为内置类型(int、double等等)和自定义类型(struct结构体、class类类型),函数重载无法对所有自定义类型进行处理int Sum(int ,int );double Sum(double ,d原创 2020-07-04 13:13:35 · 164 阅读 · 0 评论 -
【C++】讲述explicit、volatile、mutable三个关键字用法
explicit用法禁止隐式生成临时对象测试用例1、不加explicit时,运行通过,因为test = 60;该行,编译器会认为它隐式生成临时对象,所以运行成功,即编译自行推演处理。但是它是不可控的。加上explicit后,程序就会报错。错误提示如下:class Test{public: explicit Test(int a) :ma(a) {}private : int ma;};int main(){ Test test(20); test = 60;//原创 2020-07-03 20:01:48 · 493 阅读 · 4 评论 -
【C++】设计模式之单例模式(懒汉模式和饿汉模式)
单例模式一、单例模式思想1、核心2、分析3、实例设计二、懒汉模式1、不借助实例的懒汉模式(不完善)2、存在的问题3、改进后的懒汉模式框架三、饿汉模式4、不借助实例的饿汉模式一、单例模式思想1、核心让一个类中只能生成一个对象,也就是如果使用者调用时是不能生成第二个对象的。2、分析在类中生成一个对象,那我们只能在生成对象上进行操作。(1)对象生成的特点:开辟内存空间这是系统进行开辟的...原创 2020-05-05 17:22:02 · 620 阅读 · 2 评论 -
【面试题】总结C++中const和static这两个关键字
C++中的const和static一、const关键字1、const修饰变量(1)修饰全局变量(2)修饰局部变量(3)修饰成员变量2、const修饰函数(1)类成员方法二、static关键字1、static修饰变量(1)修饰全局变量(2)修饰局部变量(3)修饰成员变量2、static修饰函数(1)类成员方法一、const关键字1、const修饰变量(1)修饰全局变量const修饰全局变量...原创 2020-05-04 21:36:45 · 473 阅读 · 0 评论 -
【C++】类成员函数的调用总结
详细说明调用点各语句是如何实现的。class CGoods{public: CGoods() { _name = new char[1](); std::cout << this << ":CGoods::CGoods()" << std::endl; } CGoods(int amount) { _name = new char[1...原创 2020-05-03 17:39:20 · 2666 阅读 · 0 评论 -
【C++】类返回值的处理及优化
1、实参传形参是初始化的过程。2、在C++中如果有类,返回值的方式是无论几个字节都是由临时对象带回。返回值返回的是一个类类型的对象,不可以由寄存器带回。原因是:对象生成调用构造函数,构造函数中有个this指针,那就相当于给对象的地址空间取地址,但寄存器是无法取地址的,所以由临时对象带回。3、代码说明class Test{public: //默认构造函数 Test() { ...原创 2020-05-02 13:39:29 · 1537 阅读 · 0 评论 -
【C++】了解赋值运算符重载函数
1、作用这是我们拷贝构造函数的代码class CGoods{public: //拷贝构造函数 CGoods(const CGoods& rhs) { cout << this << ":CGoods::CGoods(CGoods )" << endl; _name = new char[strlen(rhs._name) + 1...原创 2020-05-01 15:31:12 · 237 阅读 · 0 评论 -
【C++】了解拷贝构造函数
1、概念只有一个形参,该形参是对本类类型对象的引用,一般用const来修饰,用已存在的类类型对象创建新对象时由编译器自动调用。2、特征class CGoods{public: /*CGoods() {}*/ CGoods(const CGoods& rhs) { cout << this <<":CGoods::CGoods(char* , f...原创 2020-05-01 12:34:25 · 167 阅读 · 0 评论 -
【C++】了解构造函数和析构函数
一、构造函数1、概念一般来说,每次都是创建一个对象,再在类的公有函数里设置信息,那能不能在创建函数的同时设置信息呢???构造函数是一个特殊的成员函数,主要作用是初始化对象的内存空间。2、注意虽然称为构造函数,但是其核心并不是开空间创建对象,而是对对象内存空间的初始化。3、特征(1)函数名与类名相同(2)无返回值(3)对象实例化时编译器自动调用对应的构造函数我们都知道类的成员方法...原创 2020-04-30 23:19:09 · 237 阅读 · 0 评论 -
【C++】详细了解this指针
1、为什么会有this指针?在C语言中,我们每定义一个函数变量,就会开辟一块内存;那在C++中呢,我们定义一个类的若干对象,系统就会为每一个对象分配存储空间。如果一个类包含数据成员和成员函数,就要分别为数据和函数代码分配存储空间。这样造成了很多没有必要的空间浪费。所以在C++中,一个类的不同对象的数据代码都有各自的存储空间,但是一个类的不同对象的成员函数代码是公用的一块空间。那既然是公用的成员...原创 2020-04-29 20:40:01 · 279 阅读 · 0 评论 -
【C++】类与对象相关知识总结
1、类的定义class className//className为类的名字{ //内部写成员函数和成员变量};类似于C中的结构体,只不过C中结构体不可以定义函数。(1)声明和定义全放在类体中成员函数如果在类中定义,编译器会将它当作内联函数来处理。所以一般不采用class Person{public: void show() { cout << _name ...原创 2020-04-29 20:14:13 · 153 阅读 · 0 评论 -
【C++】const的详细讲解
1、在C语言中,我们认为const是常变量,不可修改下面这个代码在 .c 文件中是可以运行的,他把const所修饰的变量看作是常变量。int main(){ const int a = 10; int* p = &a; *p = 20; printf("%d\n", a); return 0;}C语言中,const用法**:C语言只是在编译阶段看一下const是否...原创 2020-04-28 17:52:32 · 204 阅读 · 0 评论 -
【C++】引用——内存单元的别名
1、引用是内存单元的别名例如:int& b = a;,给a取一个别名为b,但不能写成& b = a;,引用一定是和类型结合使用的。2、虽然引用是别名,但是C++在底层是以指针的方式来支持引用的特性的,在所有使用到引用变量的地方,系统都会自带解引用过程。在下面的代码中分别用了引用和指针,我们查看一下反汇编,我们发现两个不同的代码执行时是完全相同的。int main(){ ...原创 2020-04-28 17:03:45 · 384 阅读 · 0 评论 -
【C++】同项目下,C、C++的相互调用
同一个项目下,C、C++的相互调用同一个体系下的语言相互调用是要语言兼容的,下面的函数是无法在一个项目中运行成功的。//.c文件中int Compare(int a,int b){ return a>b;}//.cpp文件中extern int Compare(int ,int );1、C++调用C接口//.c文件中int Compare(int a,int b){...原创 2020-04-28 00:22:32 · 507 阅读 · 0 评论 -
【C++】简述函数重载
1、为什么用函数重载写一个求两个数的和的代码#include<stdio.h>int Sum(int a, int b){ return a + b;}int main(){ Sum(10, 20);//ture Sum(10.8,20.7);//第二种 return 0;}如果用第二种的话就会导致结果精度不准确,有人说可以用以下两种解决方式:(1)泛...原创 2020-04-28 00:21:45 · 292 阅读 · 0 评论 -
【C++】函数默认值以及内联函数
一、函数默认值1、在函数设置形参是给定默认值,在之后的函数运行过程中,就认为这个参数是默认的值。int compare(int a,int b = 10){ return a > b;}int main(){ compare(10);//因为b已经有默认值,所以这个10是给a return 0;}2、函数默认值的注意事项(1)给默认值时,是沿着形参列表自左向右给默认...原创 2020-04-27 00:33:09 · 242 阅读 · 0 评论 -
【C++】函数调用约定
1、函数调用方式函数调用约定的方式有_cdcel、_stdcall、_fastcall(1)约定了符号的生成规则(2)约定了入栈顺序2、形参内存的开辟和清理int Sum(int a, int b){ return a + b;}int main(){ int a = 10; int b = 20; Sum(a, b); return 0;}(1)_cdcel在调...原创 2020-04-26 23:50:46 · 204 阅读 · 0 评论 -
【C++】函数堆栈调用以及反汇编的了解
1、思考在函数调用的过程我们可以看作是一个调用链。例如:在main函数中调用Sum函数,其中main为调用方,Sum为被调用方问题一:被调用方执行完后,怎么回退到调用方函数???问题二:被调用方函数执行完回到调用方函数后,怎么知道延下一行继续执行??问题三:返回值是由什么带出来的??问题四:形参需不需要开辟内存?如果形参开辟内存,在哪里开辟的?2、在虚拟地址空间有一块区域,称为栈区,...原创 2020-04-26 14:57:03 · 364 阅读 · 0 评论 -
【C++】编译汇编的相关内容
一、操作系统1、操作系统分为32位和64位操作系统。(其中32位和64位表示的是算术逻辑单元的宽度)2、举例:int a = 10;&a;其中&a代表的是虚拟地址,目的是为了保护内存。原因如下:假如有两个程序A和程序B(1)A程序和真实的物理地址内存之间有一个4G的虚拟内存地址,A程序会映射到虚拟地址空间,再由虚拟地址空间映射到一部分物理地址内存上,如果A程序被破...原创 2020-04-25 18:28:17 · 378 阅读 · 0 评论