![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++核心编程
C++核心编程,稍难
陈天白
这个作者很懒,什么都没留下…
展开
-
类和对象 第六部分第五小节:继承同名成员处理方式
当子类与父类拥有相同名称的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数。问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据?(一)同名成员属性处理方式。(二)同名成员函数调用。额外:同名成员函数重载。原创 2024-02-17 14:53:03 · 447 阅读 · 0 评论 -
类和对象 第六部分第四小节:继承中构造和析构函数
子类继承父类以后,当创建子类对象,也会调用父类的构造函数。原创 2024-02-17 14:33:04 · 393 阅读 · 0 评论 -
类和对象 第六部分第三小节:继承中的对象模型
结果表明:父类中所有非静态成员属性都会被子类继承下去,父类中私有成元函数是被编译器给隐藏了,因此是访问不到的,但确实被继承下去了。在开始界面找到VS文件夹,打开其中的开发人员命令提示符(developer commend prompt for VS)cl / d1 reportSingleClassLayoutson 源1.cpps。我们在命令提示符中跳转盘符到对应的文件存放盘,格式为“盘符:”问题:从父类继承过来的成员,有哪些属于子类对象中。然后,我们通过cd命名指向对应的文件夹。原创 2024-02-08 13:53:45 · 449 阅读 · 0 评论 -
类和对象 第六部分第二小节:继承方式
保护继承(除了原本不可访问以外,全部变为保护权限)私有继承(除了原本不可访问以外,全部变为私有权限):继承的语法:class 子类 继承方式:父类。公共继承(全部继承,不改变)原创 2024-02-08 13:45:11 · 352 阅读 · 0 评论 -
类和对象 第六部分 继承 第一部分:继承的语法
派生类中的成员,包含两大部分。一类是从基类中继承过来的,一类是自己增加的成员,从基类继承过来的表现其共性,而新增的表现其个性。我们可以发现,下级别的成员除了拥有上一级的共性,还有自己的特性,这个时候,我们可以讨论利用继承的技术,减少代码重复代码,这边不理解就参考《马原》里事物的共性和个性的区别进行理解。继承语法:class 子类 :继承方式 父类。直接这样写会导致代码过于繁琐,重复率太高。代码案例:例如用c++编写一个网页。可见,代码量减少后显示内容不变。继承是面向对象的三大特性之一。原创 2024-01-30 16:37:56 · 735 阅读 · 0 评论 -
类和对象 第五部分第六小节:函数调用运算符重载
2.仿函数没有固定写法,非常灵活。代码案例:打印输出仿函数。代码案例:实现加法运算。原创 2024-01-30 16:20:51 · 426 阅读 · 0 评论 -
类和对象 第五部分第五小节:关系运算符重载
作用:重载关系运算符,可以让两个自定义类型对象进行对比操作。初始代码操作:判断p1和p2是否相等。如果为其它关系运算符则以此类推。原创 2024-01-29 14:54:31 · 438 阅读 · 0 评论 -
类和对象 第五部分第四小节:赋值运算符重载
原因是p2赋值给p1的时候,只复制了值而没有复制地址,仅仅实现浅拷贝,导致被delete后,内存地址给清空了两遍,发生错误。如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题。4.赋值运算符“operator=”,对属性进行值拷贝。3.默认拷贝沟早函数,对属性进行值拷贝。1.默认构造函数无参,函数体为空。2.默认析构函数无参,函数体为空。代码增添:添加成员函数。代码运行后会出现错误。原创 2024-01-29 14:50:10 · 494 阅读 · 0 评论 -
类和对象 第五部分第三小节:递增运算符重载
后置递增使用值的原因:temp值为局部变量,使用完便被释放掉,而引用不能返回局部变量。作用:通过重载递增运算符,实现自己的整型数据递增。1.重载前置++运算符。2.重载后置++运算符。原创 2024-01-28 15:54:35 · 367 阅读 · 0 评论 -
类和对象 第五部分第二小节:左移运算符重载
利用成员函数重载写出来的代码为 void operate原创 2024-01-28 15:26:27 · 460 阅读 · 0 评论 -
类和对象 第五部分 运算符重载 第一小节:加号运算符重载
在类外添加全局函数,亦可以实现+号重载,不过要注意顺序,一定要在设定类的后面写次全局函数。语法:类名 operate+(类名 &形式参数名称)如果没有实现加号运算符重载,会让代码直接报错。如果在类内添加成员函数,实现加号运算符的重载。作用:实现两个自定义数据相加类型的运算。额外:运算符重载,也可以发生函数重载。1.通过成员函数实现类的重载。2.全局函数重载+号。原创 2024-01-27 15:33:57 · 357 阅读 · 0 评论 -
类和对象 第四部分:友元
在程序里,有些私有属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。因此,我们在building声明goodGay为友元,就能够实现从类访问私有变量。但是如果在类内的最上层添加全局函数友元,就直接可以实现访问私有函数。但是我们去掉注释,访问私有成员变量m_bedroom便会报错。友元的目的就是让一个函数或者类,访问另一个类私有成员。正常来说,在类外无法访问到私有函数会报错。(三)成员函数做友元。原创 2024-01-27 15:18:10 · 445 阅读 · 0 评论 -
类和对象 第三部分第三小节:const修饰成员函数
在此案例中,this可以等于person *const this,因此,const person * const =void showperson() const,在成员函数后面加const,本质上是修饰this指针,让指针所指向的值也不可以修改。(二)常对象只能调用常函数,不可以调用普通成员函数,因为普通成员函数可以修改属性,这违背了常对象得基本原则。(三)成员属性声明时加关键字mutable,在常函数中依然可以修改,在常对象中亦可以修改。(一)成员函数后面加const后我们成这个函数为常函数。原创 2024-01-26 16:00:49 · 347 阅读 · 0 评论 -
类和对象 第三部分第二小节:空指针访问成员函数
C++中空指针也可以调用成员函数的,但是也要注意有没有用到this指针,如果有用到this指针,需要加以保证代码的健壮性。但是换直接用函数就正常。原创 2024-01-26 15:39:10 · 358 阅读 · 0 评论 -
类和对象 第三部分第一小节:C++对象模型和this指针
C++中成员变量是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就说多个同类型的对象会共用一块带代码,C++通过提供特殊的对象指针:this解决代码区分对象调用自己,this指针指向被调用的成员函数所属的对象。注意,如果将personaddage的返回改成值而不是引用,则会执行拷贝构造函数功能,复制一份新的p2,后面同理,因此p2只能在第一次被改变,其余就是改变新增的p2值。2.在类的非静态成员函数中返回对象本身,可以使用return *this。在C++中,类内的成员变量和成员函数分开存储。原创 2024-01-26 15:21:14 · 465 阅读 · 0 评论 -
类和对象 第二部分第八小节:静态成员
静态成员是属于类而不是类的实例的成员,因此在编译时就已经为其分配了内存空间。当定义一个静态成员变量时,无论是否有类的实例存在,该静态成员变量都会在编译阶段被分配内存空间。由于静态成员在编译阶段就已经分配内存,所以它们的生命周期与程序的运行周期相同。静态成员的变量不属于某一个对象,所有对象都共享同一份数据,因此静态成员变量总共有两种访问方式。静态成员就是在成员和成员函数前加上关键字static,称为静态成员。静态成员函数也是有访问权限的,位于私有状态不可访问。2.静态成员的函数只能访问静态成员变量。原创 2024-01-25 16:19:06 · 753 阅读 · 0 评论 -
类和对象 第二部分第七小节:类对象作为成员
【代码】类和对象 第二部分第七小节:类对象作为成员。原创 2024-01-25 15:19:55 · 427 阅读 · 0 评论 -
类和对象 第二部分第六小节:初始化列表
语法:构造函数():属性1(值1),属性2(值2)……同时,我们可以使用有参数构造函数实现列表值的自由修改。作用:C++提供了初始化列表的操作,来初始化属性。原创 2024-01-25 15:01:31 · 364 阅读 · 0 评论 -
类和对象 第二部分第五小节:深拷贝和浅拷贝
例如:系统中的拷贝构造函数就是浅拷贝,仅赋值,但地址没有复制,指向的还是同一片地址。额外:析构代码用途:在new一个对象后,在结束时手动将其释放时使用。效果图:直接报错,因为堆区内存给释放了两次,属于非法操作。深拷贝:在堆区重新申请空间,进行拷贝操作。浅拷贝:简单的赋值拷贝操作。代码成功实现功能不报错。原创 2024-01-24 18:19:20 · 461 阅读 · 0 评论 -
类和对象:第二部分第三小节 拷贝构造函数的调用时机
(一)使用一个已经创建完毕的对象来初始化一个新的对象。C++中拷贝构造函数的时机通常有三种情况。(二)值传递的方式给函数参数传值。原创 2024-01-23 16:44:21 · 478 阅读 · 1 评论 -
类和对象:第二部分第二小节 构造函数的分类以及调用
一.两种分类方式: 按参数分为:有参构造和无参构造 #include <iostream> using namespace std; class person { public: // 无参构造函数 person() { cout << "无参构造函数调用" << endl; // 执行默认的初始化操作 } //有参构造函数 person(int a){ cout << "有参原创 2024-01-23 15:25:00 · 341 阅读 · 1 评论 -
类和对象 第二部分 对象的初始化和清理
这两个函数将会被编译器自动调用,完成对对象的初始化和清理工作,对象的初始化和清理工作是编译器强制要求我们做的事情,因此如果我们不提供构造和析构,编译器会提供,但其提供的是空实现,相当于函数体为空。一个对象或者变量没有初始状态,对其使用后果未知,同样,使用完一个对象或变量,没有及时清理,也会造成一系列安全问题。构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数是由编译器自动调用,无需手动调用。4.程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次。析构函数语法:~类名(){}原创 2024-01-22 17:39:33 · 351 阅读 · 0 评论 -
第四节:类和对象 第一部分 封装
例如:在以上案例中,我们将年龄限制为可读可写,那么可以在公共函数中设置接收函数和输出函数,年龄设置为可读,我们可以在公共函数中设置输出函数;C++认为万事万物都皆为对象,对象上有属性和行为,类中的属性和行为统一称为成员,所以,属性又可以被称为成员属性,成员变量;行为可以被称为成员函数、成员方法。人可以作为对象,属性有姓名、年龄、身高、体重,行为有行走、跑、跳、唱歌等。车也可以作为对象:属性有轮胎、方向盘、车灯、行为有载人、放音乐、放空调。设计一个学生类:可以给姓名和学号赋值,可以显示学生的姓名和学号。原创 2024-01-22 20:46:35 · 565 阅读 · 0 评论 -
第三节:函数高级
1.如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须要有默认值。C++中函数的形参列表里可以有展位参数,用来占位,调用函数时必需补齐该i位置。2.如果函数声明有默认参数,函数实现就不能有默认参数,否则会出现二义性。注意:函数的返回值是不可以作为函数的重载的条件,会报错。在C++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型 函数名(参数=默认值){}语法:返回值类型 函数类型(数据类型){}尽量区分两个函数,最好不要设置默认参数。2.函数重载遇到函数默认参数。原创 2024-01-22 15:41:16 · 346 阅读 · 0 评论 -
第二章:引用
作用:常量引用主要用来修饰形参,防止误操作,在函数形式参数列表中,可以加const修饰形参,防止形参改变实参。通过引用参数产生的效果同按地址传递是一样的,引用的语法更加简单。相当于传入了一个常量指针常量,既不可以修改值,也不可以修改地址。作用:函数传参时,可以利用引用的技术让形参修饰实参。引用的本质是在C++内部实现一个指针常量。作用:引用是可以作为函数的返回值存在的。(二)引用在初始化后,不可以改变。(一)注意:不要返回局部变量引用。(一)引用必需初始化;四.引用做函数的返回值。原创 2024-01-22 15:32:30 · 405 阅读 · 0 评论 -
第二章:C++核心编程 第一节:内存四区
凡是写在函数体内的定义数据都是局部变量,只能被当前函数调用全局变量写在函数体外,可以被任意函数调用,局部变量和全局变量存放于不同的内存区域。由程序员分配释放,若程序员不释放,程序结束后会由操作系统回收,在C++中主要利用new在堆区开辟内存,可以实现数据存放。注意事项:不要返回局部变量的地址,栈区开辟的数据是由编译器自动释放,再去调用是非法的。代码区是共享的:共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。不同的区域存放不同的数据,赋予不同的生命周期,给我们更大的灵活编程。原创 2024-01-22 15:24:26 · 312 阅读 · 0 评论