C++学习
一棵橙子树
C#/C++
展开
-
C++类型转换
静态转换:static_cast,最常用的转换,用于基础数据类型和子类父类之前的引用或者指针转换。动态转换:dynamic_cast,最安全的转换,对于转换要求很严格,例如丢失精度等都不允许。常量转化:const_cast,只能对指针或者引用进行操作,将数据在const和非const之间进行转换。...原创 2020-08-22 13:04:59 · 114 阅读 · 0 评论 -
C++类模板的基本使用
类模板与函数模板最大的区别在于类模板不支持类型推导,需要显示指定参数类型:当模板类作为参数传递时,有如下三种方式:模板类的继承时,如果子类不是模板类,则需要显示指定基类类型(否则子类实例化时不知道基类的类型),如果子类也是模板类,那么可以设置模板参数来分别标识子类和基类的成员。模板类不要做分文件编写,都写在一个文件中,最后将该文件改写为.hpp后缀,然后主文件就include该.hpp文件。原因是模板类的声明和实现分文件编写不能链接上...原创 2020-08-22 11:28:46 · 535 阅读 · 0 评论 -
C++函数模板的基本使用
函数模板类似于C#泛型,使用时编译器优先寻找普通函数。//类或者方法(表示模板类或者模板方法)template<class T>void InsertSort(T nums[],int len){ for (int i = 1; i < len; ++i) { int tmp = nums[i]; int j; for (j = i - 1; j >= 0; --j) { if (nums[j] > tmp) { nums[j原创 2020-08-16 18:01:11 · 473 阅读 · 0 评论 -
C++向上向下类型转换的安全性问题
向上类型转换是指子类对象转为父类对象,向下类型转换是指父类对象转换为子类对象。(父辈在上)如果没有发生多态(父类指针指向子类对象),那么向下转换是不安全的,向上转换是安全的。Animal* anim = new Animal;基类转派生类Cat* cat = (Cat*)anim;这样是不安全的,因为Cat所占大小比Animal更大,而申请空间只有Animal大小,指针转换后可能会导致越界。如果发生多态,Animal* anim = new Cat; Cat* cat = (Cat*)ani原创 2020-08-16 17:17:19 · 1374 阅读 · 1 评论 -
C++抽象基类和纯虚函数、虚析构和纯虚析构
C++中抽象基类的定义与C#中的abstract描述的类相似,只不过C++中没有abstract关键字,而是通过在类中声明一个纯虚函数,从而达到该类是抽象基类的目的。所谓纯虚函数,就是只有声明而没有定义,所有继承该类的子类都必须重写该函数,在C++中的写法就是 virtual void func01() = 0;虚函数等于0表示是纯虚函数。...原创 2020-08-02 21:02:11 · 516 阅读 · 2 评论 -
C++菱形继承、虚继承和虚基类
所谓菱形继承,就是一个父类有两个子类对象,然后又有一个类继承了这两个子类对象。这样会导致该类中有两份数据,造成数据的浪费,一个解决办法就是使用虚继承。让两个子类virtual继承父类,那么则会保留两个虚基类指针,在类继承这两个对象时,则会保留这个虚基类指针,同时数据也会只有一份,可以通过虚基类指针在虚基类表中找到数据的位置。...原创 2020-08-02 20:43:48 · 211 阅读 · 0 评论 -
C++虚函数指针与虚函数表
当父类中某个方法有virtual关键字修饰,则该方法被放入虚函数表中,同时,有一个指针指向该父类的虚函数表。 当子类继承父类后,子类会继承父类的虚函数指针和虚函数表,(在子类构造函数调用时)会将自己的虚函数指针指向自己的虚函数表,但是如果子类重写了该方法(加virtual或者不加都可以,但是方法必须完全相同包括返回值),那么子类的虚函数表中的函数则会改变。 父类指针指向子类对象时,发生动态联编,如果虚函数表被重写,则调用父类虚函数会指向被重写的方法,否则父类指针指向自身的方法,是静态联编。当父类.原创 2020-07-30 22:22:44 · 1209 阅读 · 0 评论 -
C++继承方式、继承中的对象模型、继承中的同名处理
继承方式共有继承、保护继承、私有继承 继承中的对象模型,子类会继承基类全部内容,而且包括私有成员,但是编译器不会让我们看到。 继承中的同名处理 同名的属性 调用子类属性时会默认调用子类的,如果想访问父类的属性,则需要调用父类然后用作用域运算符得到父类属性。 同名的方法 调用子类的方法时会默认隐藏父类的方法,如果想调用父类的方法,一样需要调用父类然后使用作用域运算符获取 son.MyBase::show(10); 继承中静态成员同名的处理 类似非静态的属性和方法,默认也是隐藏了父类的方法.原创 2020-07-28 22:40:14 · 131 阅读 · 0 评论 -
C++常函数、常对象、单例模式、友元、引用的本质、this指针的本质
用const修饰类的成员函数,那么该成员函数就不能修改类中的属性值,该函数又称常函数。原因是类的成员函数有隐式的this指针,this指针本质是指针常量,加了const变为常量指针常量,不允许修改指针所指向的内容。用const修饰类的对象,那么该对象不允许修改其属性值,同时也只能调用该对象的常函数,该对象又称常对象。C++中写单例模式需要将默认构造函数、默认拷贝构造函数设置为私有,并设置私有的静态指针然后再设置共有的静态方法,用来获取其中私有的静态指针,然后再在类的外部实例化出静态指针。.原创 2020-07-26 20:59:03 · 145 阅读 · 0 评论 -
指针常量和常量指针以及右值引用
原创 2020-07-25 21:49:26 · 281 阅读 · 0 评论