C++学习总结
此专栏为个人对C++的学习总结,适合初学者
东园桃与李
这个作者很懒,什么都没留下…
展开
-
十七. C++多态详解
多态C++支持编译时多态(静态多态)和运动时多态(动态多态),运算符重载和函数重载就是编译时多态,而派生类和虚函数实现运动时多态。静态多态和动态多态的区别在于函数地址是早绑定(静态联编)还是晚绑定(动态联编)。如果函数的调用,在编译阶段可以确定函数的调用地址并产生代码,就是静态多态,就是说地址是早绑定的。而如果函数的调用,其地址不能编译不能在编译期间确定,而需要在运行时才能确定,这就是属于晚绑定(动态联邦、运行时多态)。多态成立条件:继承 子类重写父类虚函数(与父类完全一致,子类这种vir原创 2020-12-30 14:27:30 · 271 阅读 · 0 评论 -
十六. C++继承与派生
为什么需要继承?继承:减少代码重复内容。C++通过继承机制可以利用已有的数据类型来定义新的数据类型,新的类不仅拥有旧类的成员,还拥有新定义的成员。一个B类继承于A类,或称从A类派生类B。这样的话,类A成为基类,类B成为派生类。派生类的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员 从基类继承过来的表现其共性,而新增的成员体现了其个性派生类继承方式:#define _CRI_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_原创 2020-12-29 22:32:16 · 109 阅读 · 0 评论 -
十五. C++运算符重载
目录运算符重载概念语法:重载+友元常用运算符重载加号运算符重载前置后置自增(++)运算符重载前置++运算符重载后置++运算符重载左移运算符(<<)重载指针运算符重载赋值运算符重载关系运算符重载函数调用运算符重载运算符重载概念在c++中,可以定义一个处理类的新运算符。这种定义很像一个普通的函数定义,只是函数的名字由关键字operator及其紧跟的运算符组成。差别仅此而已。它像任何其他函数一样也是一个函数,当编译器遇到适当的模式时,就会调用原创 2020-12-29 17:18:30 · 241 阅读 · 0 评论 -
十四. C++友元
目录友元友元语法友元类注意事项全局函数做友元函数代码实例类做有元类成员函数作为友元友元类的私有成员无法在类的外部访问。然后,有时我们需要在类的外部访问类的私有成员。解决这一访问问题的方法就是友元函数。我们可以将一个全局函数、某个类中的成员函数、甚至整个类声明为友元。友元语法friend关键字只出现在声明处 其他类、类成员函数、全局函数都可以声明为友元 友元函数不是类的成员,不带this指针 友元函数可以访问对象任意成员属性,包括私有属性友元类注意事项原创 2020-12-29 12:21:37 · 101 阅读 · 0 评论 -
十三. C++面对对象模型
目录成员变量和函数的存储代码实例this指针this指针工作原理this指针的使用代码实例const修饰成员函数和对象成员变量和函数的存储在C++中,数据和函数是分开存储的。C++中的非静态数据成员直接内含在类对象中。 成员函数虽然内含在class声明之内,却不出现在对象中。 每一个非内联成员函数(non-inline member function)只会诞生一份函数实例.代码实例此代码输出为:size of (Person) 16(因为对齐)#def原创 2020-12-29 10:50:40 · 125 阅读 · 0 评论 -
十二. C++静态成员变量和函数
静态成员在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字static声明为静态的,称为静态成员。不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享。静态成员变量在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量。与一般的数据成员不同,无论建立了多少个对象,都只有一个静态数据的拷贝。静态成员变量,属于某个类,所有对象共享。静态变量,是在编译阶段就分配空间,对象还没有创建时,就已经分配空间。静态成员变量必须在类中原创 2020-12-29 09:56:57 · 124 阅读 · 0 评论 -
十一. C++动态对象创建:new与delete详解
malloc分配内存的问题程序员必须确定对象的长度。 malloc返回一个void*指针,C++不允许将void*赋值给其他任何指针,必须强转。 malloc可能申请内存失败,所以必须判断返回值来确保内存分配成功。 用户在使用对象之前必须记住对他的初始化,构造函数不能显示调用初始化(构造函数由编译器调用),用户可能忘记调用初始化函数。malloc实例class Person{public: Person(){ mAge = 20; pName = (char*)malloc(s原创 2020-12-29 00:47:32 · 914 阅读 · 0 评论 -
十. C++初始化列表和explicit关键字
初始化列表代码实例#define _CRI_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class Person{public: Person() {} int m_A; int m_B; int m_C; //有参构造初始化数据 /* Person(int a, int b,int c) { m_A = a; m_B =原创 2020-12-28 23:49:27 · 152 阅读 · 0 评论 -
九. C++中拷贝构造的调用时机、浅拷贝和深拷贝
C++中拷贝构造的调用时机、浅拷贝和深拷贝C++中拷贝构造函数的调用时机用一个对象初始化另一个对象 对象以值传递的方式传给函数参数 函数局部对象以值传递的方式从函数返回#define _CRI_SECURE_NO_WARNINGS#include<iostream>using namespace std;class Person{public: Person() { cout << "默认构造函数调用" << endl; } Per原创 2020-12-28 23:19:55 · 251 阅读 · 0 评论 -
八. C++对象的构造和析构
目录C++对象的构造和析构初始化和清理构造函数和析构函数构造函数语法析构函数语法代码实例构造函数的分类、调用方法和调用规则分类和调用方法调用规则C++对象的构造和析构初始化和清理C++中的面对对象思想源于现实,是对现实事物的抽象,具体来说,当我们创建对象的时候,这个对象应该有一初始状态,当对象销毁之前应该销毁自己创建的一些数据。对象的初始化和清理也是两个非常重要的安全问题,一个对象或者变量没有初始化时,对其使用后果是未知的。同样,使用完一个变量没有及时清理原创 2020-12-28 22:21:48 · 158 阅读 · 0 评论 -
七. C/C++的封装及私有成员
目录类的封装C语言下封装的缺陷C++中的封装建议将成员变量设置为private类的封装现实世界的事物都具有自己的行为和属性,如果我们将其属性和行为表示出来,那么就可以抽象这个事物。C语言下封装的缺陷而在C语言中,因为struct仅仅能定义成员变量,而不能定义函数。这就意味着属性和行为是分开的。这时会发生一些错误,见如下代码实例:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stri原创 2020-12-28 20:38:37 · 515 阅读 · 0 评论 -
六. C++函数重载与extern “C”浅析
函数重载同一个字在不同场景下具有不同的含义。C++中也有类似的现象出现,同一函数名在不同场景下可以具有不同的含义。在传统的C语言中,函数名必须是唯一的,程序中不允许出现同名的函数。在C++中是允许出现同名的函数,这种现象称为函数重载。重载的目的就是为了方便的使用函数名。实现函数重载的条件同一个作用域 参数个数不同 参数类型不同 参数顺序不同注:函数返回值不能作为重载的条件。//函数重载条件namespace A{ void MyFunc(){ cout << "无参原创 2020-12-28 19:52:46 · 389 阅读 · 0 评论 -
五. C++默认参数和占位参数
默认参数c++在声明函数原型的时可为一个或者多个参数指定默认(缺省)的参数值,当函数调用的时候如果没有指定这个值,编译器会自动用默认值代替。注意点:一个形参设置默认值,后面位置的形参也需要设置默认参 如果函数声明和函数定义分开,函数声明设置了默认参数,函数定义不能在设置默认参数void TestFunc01(int a = 10, int b = 20){ cout << "a + b = " << a + b << endl;}//注意点:/原创 2020-12-28 17:27:38 · 502 阅读 · 0 评论 -
四. C++中的引用及其本质
引用基本用法引用的简单理解引用是C++对C的重要扩充。其也存在与与JAVA、Go等语言中,对于引用,首先:变量名实质上是一段连续内存空间的别名、是一个标号(门牌号) 程序通过变量来申请并命名内存空间 通过变量的名字可以使用存储空间因此,C++中的引用可以看多一个已定义变量的别名。其基本语法为 Type & ref=val。引用注意实项&在此不是求址运算,而是起到标识作用。 类型标识符是指目标变量的类型。 必须在声明引用变量时初始化。 引用初始化后不能改变(不能原创 2020-12-28 17:06:52 · 113 阅读 · 0 评论 -
三. C/C++中const异同总结
目录C/C++全局变量C/C++局部变量CC++指针不可修改(const int a = 10)指针可修改(变量初始化、自定义数据类型)用const替代#define#define MAX 1024cosnt和#define区别C/C++全局变量1. c语言中全局const会被存储到只读数据段。而C++中全局const当声明extern或者对变量取地址时,编译器会分配存储地址,变量存储在只读数据段。 const int constA = 10; int m原创 2020-12-28 14:44:14 · 140 阅读 · 0 评论 -
二. C++对C的增强
C++对C的增强可总结为:1. 全局变量检测增强2. 函数检测增强:参数类型增强、返回值检测增强、函数调用参数检测增强3. 类型转换检测增强4. 结构体struct增强:C++中可以加函数,C使用时不可加函数。另外C使用时必须加struct:(如:struct Person p1),C++可不加5. bool类型增强,只有真或假6. 三目运算符增强7. const增强; C中可以用指针改,而C++不可以1. 全局变量检测增强int a;int a = 10; 此会报原创 2020-12-28 11:33:16 · 152 阅读 · 0 评论 -
一. C++: 命名空间namespace与using指令
命名空间namespaceC++命名空间的使用是为了防止名称冲突,引入关键字namespace可以更好地控制标识符的作用域。其语法特点如下:1. 命名空间下可以放符号常量、函数、变量、结构体、类和对象等等。2. 命名空间只能全局范围内定义3. 命名空间可以嵌套命名空间4. 命名空间是开放的,即可以随时把新的成员加入已有的命名空间中5. 无名命名空间(匿名命名空间)意味着命名空间中的标识符只能在文本文件内访问,相当于给这个标识符加上了static, 使其可以作为内部连接6. 命原创 2020-12-28 11:05:14 · 428 阅读 · 0 评论