- 博客(105)
- 收藏
- 关注
原创 多态
多态分为两类下面通过案例进行讲解多态多态满足条件:1、有继承关系2、子类重写父类中的虚函数多态使用:父类指针或引用指向子类对象未发生重写时,子类虚函数表完全复制父类;重写发生时,子类重写的函数会把原父类的覆盖;
2024-02-13 18:16:08
430
原创 程序的内存模型
C++程序在执行时,将内存大方向分为4个区域1.代码区:存放函数体的二进制代码,有操作系统进行管理2.全局区:存放全局变量和静态变量以及常量3.栈区:由编译器自动分配及释放,存放函数的参数值,局部变量等4.堆区:由程序员分配和释放,若程序员不释放,程序结束时有操作系统回收内存四区意义:不同区域存放的数据,赋予不同的生命周期,让编程更灵活。2.程序运行前在程序编译后,生成了exe可执行程序,为执行该程序前分为两个区域。
2024-02-10 12:07:09
396
原创 运算符重载
对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。运算符重载的。不妨把这样的函数称为运算符函数。运算符函数的格式如下:运算符重载为时,参数的个数等于运算符的目数(即操作数的个数);运算符重载为时,参数的个数等于运算符的目数减一。
2024-02-09 20:57:41
386
原创 常用对象和常用成员函数
C++不允许在常量对象上调用成员函数,除非成员函数本身也被声明为常量。甚至对不会修改对象的成员函数,也是如此,此外,编译器不允许声明常量的成员函数修改对象。出现在构造函数的参数表 和 表示构造函数函数体开始的左大括号之间。尽管构造函数必须是非常量成员函数,但它仍然可用于初始化常量对象。错误的原因是常量对象一旦初始化后,其值就再也不能改变。常量对象与常量成员函数来防止修改对象,实现最低权限原则。,因为普通成员函数在执行过程中有可能修改对象的值。被定义为常量对象的情况下,下面这条语句是错误的。
2024-02-07 20:12:57
388
原创 成员对象与封闭类
类里有其他对象则该对象叫;有成员对象的类叫;上例中,如果CCar类不定义构造函数,则会使用默认的无参构造函数,那么下面的语句会编译出错:因为编译器不明白CCar类中的tyre成员对象该如何初始化。engine成员对象的初始化则没问题呢,因为用默认构造函数即可。。
2024-02-07 18:19:01
388
转载 静态成员变量
在 C++ 类中 , 静态成员变量又称为 静态属性;静态成员归属 : 静态成员变量 是特殊的成员变量 ,;静态成员变量 提供了 同类对象的共享机制 :, 都可以共享访问 想通的 静态成员变量实例;
2024-02-07 14:49:15
50
原创 this指针
我们可以发现,最终打印的时候调用的Display()是同一个函数, 那么既然d1,d2调用的都是同一个函数,编译器如何知道d1是2022-5-11,d2是2022-5-12呢?6.this在成员函数的开始执行前构造的,在成员函数的执行结束后清除。答案肯定是不能的,因为this是被const修饰的,不能修改this指针的。在真正的编译器中this指针的用const修饰的,this指针本身是不能被修改的,但是内容是可以修改的。注意:我们不能显示的写出来,因为他是隐含的,我们不能抢了编译器的活。
2024-02-07 12:25:52
541
原创 析构函数
1.名字与类名相同,在前面加’~‘,没有参数和返回值,一个类最多只能有一个析构函数。2.析构函数对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作,比如释放分配空间等。如果定义类时没写析构函数,则编译器生成缺省析构函数。缺省析构函数什么也不做;如果定义了析构函数,则编译器不再生成。C++规定析构函数的名字是类名的前面加一个波浪号(~)。
2024-02-06 22:22:18
458
原创 构造函数
1.是成员函数的一种,名字与类名相同,可以有参数,不能有返回值(void也不行)作用是对对象进行初始化,如给成员变量赋初值2.如果定义类是没写构造函数,则编译器生成一个默认的无参数的构造函数。(不做任何操作如果定义了构造函数,则编译器不生成默认的无参数的构造函数。3.对象生成时构造函数自动被调用。对象一旦生成,就再也不能在其上执行构造函数。4.一个类可以有多个构造函数。5.为什么要构造函数?1.构造函数执行必要的初始化工作,有了构造函数,就不必专门在写初始化函数,也不用担心忘记调用初始化函数。
2024-02-06 15:48:05
383
原创 类与对象
类的定义:class 类名{};1.从客观事物抽象出类通过类,可以定义变量。类定义出来的变量,也成为类的实例,就是我们所说的“对象”。在C++中,类的名字就是用户自定义的类型的名字。可以像使用基本类型那样来使用它。CRectangle就是一种用户自定义类型。CRectangle::说明后面的函数是CRectangle类的成员函数,而非普通函数。那么,一定要通过对象或对象的指针后对象的引用才能调用。和用“class”的唯一区别,就是为说明是公有还是私有的成员,就是公有。
2024-02-02 21:49:19
919
原创 内联函数、函数重载、缺省参数
在函数定义前面加“inline”关键字,即可定义内联函数。转换后相当于右边的代码有时可能反而会比调用函数更慢(因为转换后的代码运行的时间可能比函数调用的时间长。一个或多个函数,名字相同,然而参数个数或参数类型不相同。以下三个函数是重载关系注意:编译器根据调用语句中的实参的个数和类型判断应该调用哪个函数。函数重载使得函数命名变得简单。
2024-02-01 23:36:11
348
原创 动态内存分配与释放
1.第一种用法,分配一个变量P = new T;(T是任意类型名,P是类型为T*的指针动态分配出一片大小为sizeof(T)字节的内存空间,并将该内存空间的起始地址赋值给P。int * pn;*pn =5;2.第二种用法,分配一个数组(N是要分配的数组元素的个数,可以是整形表达式动态分配出一片大小为N*sizeof(T)字节的内存空间,并将该内存空间的起始地址赋值给P。3.new类型的返回值类型:new T 和new T[N]的返回值类型都是:T*
2024-02-01 20:24:04
769
原创 关键字const
3.函数参量为常函数指针时,可以避免函数内部不小心改变指针所指地方的内容。2.不能把常量指针赋值给非常量指针,反过来可以。1.不可以通过常量指针来修改其指向的内容。
2024-02-01 19:53:10
314
原创 引用与常引用
下面写法定义了一个引用,并将它进行初始化为引用某个变量。类型名 & 引用名 = 某变量名;// r引用了n,r的类型是int &某个变量的引用,等价于这个变量,相当于该变量的别名。(两者可以看作同一个体注意:1.定义引用时一定要将其初始化成某个变量。2.引用只能引用变量,不能引用常量和表达式。3.初始化后,它就一直引用该变量,不会再引用别的变量了。
2024-02-01 19:36:49
482
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人