
C++基础
lg23:59
算法小白菜,记录学习,分享知识,欢迎交流,共同进步!
展开
-
PyEMD 库函数安装 No module named ‘PyEMD’
XX\Anaconda3\Lib\site-packages找到pyemd,将其改名为PyEMD!解决!原创 2022-02-28 10:01:27 · 945 阅读 · 0 评论 -
C++之初始化列表
初始化列表就是在初始化阶段对一些参数进行赋值,所以像const成员、引用成员等这些必须在初始化阶段赋值,别的时候不允许修改的成员变量,必须使用初始化列表进行对成员变量进行赋值。...原创 2020-09-03 17:03:41 · 205 阅读 · 0 评论 -
C++面向对象之多继承浅析
多继承语法C++允许一个类继承多个类语法:class 子类 : 继承方式 父类1, 继承方式,父类2.....多继承可能会引发父类中有同名成员出现,需要作用域区分C++实际开发中不建议多继承比较经典的是菱形继承菱形继承带来的主要的问题是子类继承了两份相同的数据,导致资源无意义浪费,这里用虚继承解决。...原创 2020-06-09 14:23:10 · 160 阅读 · 0 评论 -
C++面向对象之继承中同名成员的处理方式
继承中同名成员的处理方式问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类的同名的数据呢?访问子类同名的成员变量或成员函数,直接访问即可; 访问父类同名的成员变量或成员函数,需要加作用域;这里注意一点的是:如果子类中出现和父类同名的成员函数,子类的同名成员函数会隐藏掉父类中所有的同名成员函数,即使是函数重载也不行!想访问父类的同名函数就必须得加作用域。静态成员访问方式和非静态一样,不同之处是静态成员还有一种访问方式:类名::静态成员名称(不同之处是访问子类:son ::原创 2020-06-09 14:23:00 · 214 阅读 · 0 评论 -
C++面向对象·之继承种父类和子类的构造和析构顺序
先构造父类后构造子类,析构顺序相反。(因为对象存放在栈上,栈区上的数据先进后出)原创 2020-06-09 14:22:50 · 316 阅读 · 0 评论 -
C++面向对象之继承解析
继承简单的程序语法:class Base{public:同一类型的类的公共的东西;};class Example : public Base //公共继承方式{public:其他类一些自己独特的一些东西;}好处:减少重复代码语法:class 子类(派生类) : 继承方式 父类(基类)继承方式公共继承 保护继承 私有继承父类中的私有属性,无论什么继承方式子类都访问不到。 通过公共继承的方式,属性的访问权限不变 通过保护继承方式,属性的访原创 2020-06-09 14:22:08 · 160 阅读 · 0 评论 -
C++面向对象之函数调用运算符重载
函数调用运算符重载函数调用运算符()也可以发生重载 由于重载后使用的方式非常像函数的调用,因此称为仿函数 仿函数没有固定的写法,非常灵活,不限于形式匿名对象: person(10) (当前行执行结束后,系统会立即回收掉匿名对象) //所谓匿名对象就是创建的时候没有写对象的名称;...原创 2020-06-09 14:21:54 · 190 阅读 · 0 评论 -
C++面向对象之赋值运算符和关系运算符重载解析
赋值运算符的重载先简单回顾一下C++编译器至少给一个类添加四个函数默认构造函数(无参,函数体为空) 默认的析构函数(无参,函数体为空) 默认拷贝构造函数,对属性进行值拷贝 赋值运算符operator=,对属性进行值拷贝(这里问题就来了,浅拷贝和深拷贝的坑又来了———堆区内存重复释放因此要对简单的赋值即浅拷贝,重载成深拷贝)这里注意:被赋值的一方要先进行判断是否本身有属性在堆区,如果有就释放干净,然后再进行深拷贝。上面的程序有一点小问题:这样的赋值运算重载还不能实现链式编程;即(p原创 2020-06-09 14:21:38 · 365 阅读 · 0 评论 -
C++面向对象之递增函数重载
递增运算符重载总结:前置++:返回引用,可实现链式编程,为什么不返回值?还是拷贝构造函数的问题,这里就不赘述了;后置++为了实现先计算表达式后++的运算规则,故设了一个局部变量为了保存++前的值来实现先计算表达式后++,返回该局部变量的就出现了问题,不能像前置++那样直接返回引用,因为这是局部变量,在程序结束后会释放掉,若直接返回局部变量的引用会造成非法操作;因此只能返回值,这样的话就会返回值的时候就会调用拷贝构造函数创建一个新的对象来返回,所以,后置++无法实现链式编程。...原创 2020-06-09 14:21:17 · 235 阅读 · 0 评论 -
C++面向对象之左移运算符重载
左移运算符重载 << 作用:可以输出自定义的数据类型左移运算符的重载用全局函数函数返回的是cout引用,因此可以进行链式编程!原创 2020-06-08 20:52:05 · 154 阅读 · 0 评论 -
C++面向对象之运算符重载解析
运算符重载之“+”意义:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型的操作。加号运算符的重载: 实现两个自定义的数据类型的运算。通过成员函数重载+号其实关键就是定义成员函数时,将成员函数名字换成编译器定好的operator+ ,在后面调用的时候就可以简化为**+**这里就是一个关键字:operator1.通过成员函数重载p1.operator+(&p2) ==>>可以简化为p1+p22.通过全局函数重载+号注意一点:运算符原创 2020-06-08 20:47:33 · 193 阅读 · 0 评论 -
C++面向对象之友元
友元在程序中,类中的一些私有属性也想让类外的一些特殊的函数或类进行访问,这时需要用到友元,友元的目的就是让一个函数或者是类访问另一个类中的私有成员。 关键字为friend 三种实现方式:全局函数做友元 类做友元 成员函数做友元1.全局函数做友元,在类内,friend 全局函数的声明;2.类做友元...原创 2020-06-08 20:15:01 · 157 阅读 · 0 评论 -
C++面向对象之const修饰成员函数
首先明确:const 限制只读状态常函数:成员函数后加const后称为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后,在常函数中依然可以修改常对象声明对象前加const称该对象为常对象 常对象只能调用常函数不可修改的原因是什么呢?还得回顾一下const修饰指针的知识,3种情况;const int * p,常量指针,const修饰指针指向的值,指向可以改,值不可以改; int * const p,const修饰指针,即指针的指向不可以修改,值可.原创 2020-06-08 17:36:26 · 321 阅读 · 0 评论 -
C++面向对象之空指针访问成员函数
空指针访问成员函数C++中空指针也可以访问成员函数,但是要注意看有没有用到this指针,如果有用到this指针就得加入this是否为空的判别来提高代码的健壮性。如下面的例子;创建空指针;没有this为空的判别:但是showClassAge函数访问了成员变量,这个操作在C++中默认用this指针来访问成员变量(这样才可以确定是哪个对象在调用或者修改成员变量);但是用空指针的时候还没有实例化出对象,因此空指针用到this时就会程序就会报错。为了改进程序,提高代码的健壮性,加入this指针原创 2020-06-08 17:16:25 · 272 阅读 · 0 评论 -
C++面向对象之this指针
从上篇博文,我们已经知道了成员变量与成员函数是分开存储的,即每一个非静态成员函数只会诞生一份函数实例,也就是多个同类型的对象会共用一块代码,那么这块代码是如何区分哪个对象在调用它呢?C++通过this 指针指向调用成员函数的对象来解决这个问题。this指针隐含在每个非静态成员函数内的一种指针。无需定义,直接用即可。this 的用途:当形参和成员变量同名时,可以用this指针来区分。 在类的非静态成员函数中返回对象本身,可使用return *this(因为this指向对象,将其解引用就可以得原创 2020-06-08 17:11:57 · 322 阅读 · 0 评论 -
C++面向对象之对象模型
成员变量和成员函数是分开存储的空对象占用的内存空间为1,即C++编译器会给每个空对象也分配一个字节的空间,是为了区分空对象占内存的位置,每个空对象也应该有一个独一无二的内存地址。Class person{Int m_a; (类的内存空间大小为4个字节,即非静态变量属于类的对象上)Static int m_a;(类的内存空间大小仍然为4个字节, 即静态变量不属于类的对象上)Void func (){}(类的内存空间的大小仍然为4个字节,非静态成员函数也不属于类的对象上)Stat...原创 2020-06-08 17:05:07 · 124 阅读 · 0 评论 -
C++面向对象之静态成员浅析
静态成员(在成员前面加上关键字static)包括成员变量和成员函数静态成员变量:所有对象共享同一份数据 (实例化出的所有对象都共享同一份数据,即静态成员变量不属于某一个对象,因此静态成员变量有两种访问方式,一种是通过对象访问,另一种是通过类名访问(person::a,即类名::成员变量的名称)) 编译阶段就分配内存(全局区) 类内声明, 类外初始化。 静态成员变量也是有访问权限的,Class person{Static int a ;(类内声明)}person::int a原创 2020-06-08 16:58:54 · 134 阅读 · 0 评论 -
C++面向对象之类对象作类成员
Class A{}Class B{A a;(实例化了一个A类型的a对象, 即B类中有对象A作为成员,A为对象成员)}构造和析构顺序:当其他类作为本类成员,构造时候先构造类对象,再构造自身。析构的顺序相反。...原创 2020-06-08 16:48:19 · 114 阅读 · 0 评论 -
C++面向对象之函数重载解析
函数重载类似多音字,不同语境有不同的含义;同样同一个函数可能处理运用的方式不同,如加函数,可能传进去的是两个变量,也可能是一个变量一个常数,这样如果不用函数重载的话就得绞劲脑汁去想一些函数名,起名字难,记住这些名字更难;为了解决这个问题就有了函数重载。函数重载满足的条件:同一作用域 函数名称相同 函数参数类型不同,或者个数不同或者顺序不同注意:函数的返回值不可以做为函数重载的条件函数重载的注意事项:引用作为重载的条件Void func( int &a){}Voi原创 2020-06-08 16:43:30 · 196 阅读 · 0 评论 -
指针常量 or 常量指针???
1.常量指针:const int *p = &a特点: 指针的指向可以修改,只能读取指向内存中的数据但不可以修改;防止引用修改内存中的数据。(常量修饰指针指向的内存中的数据)2.指针常量: int *const p= &a特点: 指向不可以修改,但指向的内存中的数据可以修改。(常量修饰指针,即该指针本身是一个常量,)...原创 2020-05-26 14:10:55 · 116 阅读 · 0 评论 -
C++ 内存分区以及堆栈区别
C++ 内存主要分为四块:代码区:存放函数体的二进制代码,由操作系统管理 全局区:存放全局变量、静态变量和常量 栈区:由编译器自动分配释放,存放函数的参数值以及局部变量值 堆区:由程序员释放,程序员不释放的话,程序结束时由操作系统回收。堆栈区别:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,若程序员忘记释放的话,程序结束时由操作系统回收。 空间大小:(一个进程一个堆, 一个线程一个栈)栈在win32平台下默认1MB预留空间, 初次递交8KB原创 2020-05-26 15:31:31 · 245 阅读 · 0 评论 -
C++面向对象之构造函数
构造函数的分类:默认构造函数(无参)person p1 (){}有参构造函数 person p2(int a ){....}拷贝构造函数person p3 (const person_2 & p)(利用另一个类来初始化)(这里的const 是为了防止修改原类)构造函数的调用括号法person p1; person p2(10) ; person p3 (p2);\ 显示法 person p1 ; person p2 =person (10); person p3 =perso.原创 2020-06-06 18:54:30 · 447 阅读 · 0 评论 -
C++ this指针浅析+例子深入理解this和拷贝构造函数
1.为什么要有this指针?首先我们知道类中的成员变量和成员函数是分开存储的,除了非静态变量别的(静态变量,非静态成员函数,静态成员函数)都不属于类的对象上,即每一个非静态成员函数只会诞生一份函数实例,也就是多个同类型的对象会共用一块代码,我们需要解决的问题是如何知道是谁在调用这块代码?这时就需要this指针。2.this 指针的简介this指针隐含在每个非静态成员函数内的一种指针。无需定义,直接用即可。this 的用途:当形参和成员变量同名时,可以用this指针来区分。 在类的非静态原创 2020-06-07 09:55:04 · 466 阅读 · 0 评论 -
C++空指针访问成员函数的一些注意事项
空指针访问成员函数C++中空指针也可以访问成员函数,但是要注意看有没有用到this指针,如果有用到this指针就得加入this是否为空的判别来提高代码的健壮性。如下面的例子;1.没有this为空的判别:但是showClassAge函数访问了成员变量,这个操作在C++中默认用this指针来访问成员变量(这样才可以确定是哪个对象在调用或者修改成员变量);但是用空指针的时候还没有实例化出对象,因此空指针用到this时就会程序就会报错。为了改进程序,提高代码的健壮性,加入this指针是否为空..原创 2020-06-07 10:34:47 · 191 阅读 · 0 评论 -
C++之经典坑--深拷贝与浅拷贝
浅拷贝:简单的赋值拷贝操作(编译器提供的默认拷贝构造函数也是用浅拷贝,其中得拷贝操作都是等号赋值)浅拷贝带来的问题就是堆区的内存重复释放。(例子: 当构造函数在初始化一个对象时创建了一块内存,当在用拷贝构造函数时就会简单的将要拷贝的对象的地址简单复制给要创建的对象,意思就是两个指针都指向同一块内存空间,当程序结束时,调用析构函数释放内存时就会出现同一块内存重复释放的情况。)深拷贝: 在堆区重新申请内存空间(该段程序执行完,对象被销毁,需要释放内存,这时就用到了析构函数,函数内部实现对堆区新开辟的内存原创 2020-06-06 18:49:45 · 160 阅读 · 0 评论