C++
文章平均质量分 59
16406070101
这个作者很懒,什么都没留下…
展开
-
C++中的强制类型转换
相信熟悉C语言与C++的人都有这样的感觉C++的语法检测比C语言要严格的多,下面是C++在类型转换时做出的改进,有四个关键词,下面我会和大家一起来研究它们的用法,讲解我会通过注释的方法展现。//首先我们来看c 中的类型转换int i=10;//相似类型可以发生隐式转换double d=i;int *p=&i;//非相似类型,不可以发生隐式类型转换,需要改成如下in...原创 2018-08-29 10:38:27 · 234 阅读 · 0 评论 -
C++虚函数的作用及实现原理(三)(含有虚函数的类的对象模型之多继承)
上一篇https://blog.csdn.net/a15929748502/article/details/80930039中我们已经一起探索了含有虚函数单继承的对象模型,这一讲我们来一起看看多继承时的对象模型。下面就由我来构造一个含有虚函数的多继承的对象模型#include <iostream>using namespace std;class B1{ ...原创 2018-07-06 16:19:00 · 395 阅读 · 0 评论 -
C++虚函数的作用及实现原理(二)(含有虚函数的类的对象模型之单继承)
首先要说明虚函数是用来实现函数重载的,而虚拟继承是用来解决从不同途径继承来的同一基类,会在子类中存在多份拷贝,浪费空间,并且产生二义性的问题(如果想要了解虚拟继承可以点这里https://blog.csdn.net/a15929748502/article/details/80898126)上一篇已经和大家探索了虚函数基本的一些内容,这一篇我们来开始探索含有虚函数的类的对象模型...原创 2018-07-06 10:09:13 · 385 阅读 · 0 评论 -
C++虚函数的作用及实现原理(一)
为什么会有虚函数的出现呢?这就不得不提到多态了多态:专业的术语说就是:同一个实现接口,使用不同的实例而执行不同的操作。而简单的来说同一个事物的不同体现,比如我是老师的学生,是爸爸妈妈的女儿。多态有什么好处:有两个好处:1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承2. 派生类的功能可以被基类的方法或引用变量所调用,这叫...原创 2018-07-05 00:27:49 · 11036 阅读 · 0 评论 -
虚拟继承
上一篇我们已经讨论了继承体系下派生类的对象模型https://blog.csdn.net/a15929748502/article/details/80893870这一篇我们来解决上一篇中提出的问题:在菱形继承里,B的成员变量在D中存了两份,这显然是不合理的,不仅浪费了空间,还产生了二义性,如何避免这种事情的发生呢,这就是接下来要讨论的问题这里就不得不提到今天的主题虚拟继承了虚拟继承的...原创 2018-07-03 17:10:27 · 1436 阅读 · 0 评论 -
继承体系下派生类的对象模型
上一篇中我们一起探索了继承的权限问题https://blog.csdn.net/a15929748502/article/details/80796483,这一篇我们来一起探索继承体系下派生类的对象模型是什么样的呢?首先什么是对象模型呢,对象模型就是对象中非静态成员变量在内存中的布局1.下面我们就从最简单的单继承开始研究,什么是单继承呢,简单地说就是一个派生类只有一个父类...原创 2018-07-03 11:52:16 · 359 阅读 · 0 评论 -
继承的权限问题
首先什么是继承呢?继承的概念;继承机制是面向对象程序设计使代码可以复用的最重要的手段,他允许程序员在保持原有的类特性的基础上进行扩充,增加功能。这样产生了新的类,成为派生类,继承呈现了面对对象程序设计的层次结构,体现了由简单到复杂的认知过程。 这样来看我们就知道了继承的作用1)实现代码复用2)实现多态性 继承的格式是什么呢...原创 2018-06-25 09:21:30 · 3856 阅读 · 3 评论 -
函数重载写法与实现原理
在讨论函数重载之前我想应该回顾一下之前的C语言代码,因为没有比较是显不出函数重载的方便的在这里我们举一个例子,我们要实现一个加法器,要求是可以解决整形和浮点型的运算,于是我们写出如下代码我们尝试用C语言的编译器来编译,虽然我们知道C语言中明确规定函数名不可以相同。报出以上错误所以这种方法是不行的,我们只能用以前的老方法了,改掉函数名写两个函数但是在函数名相...原创 2018-06-21 15:31:03 · 4663 阅读 · 4 评论 -
命名空间
一个项目往往是许多人协作完成的,如果A定义了a 这个变量,而B也定义了a这个变量那么就会发生命名冲突。命名空间大家都知道是用来解决命名冲突问题的。1下面我们就以标准输入输出为例;先来介绍一下标准输入输出,1),iostream库包含两个基础类型istream和ostream ,分别表示输入流和输出流流;;随时间的推移,字符顺序生成或消耗的2)标准输入输出对象...原创 2018-06-21 09:13:43 · 1460 阅读 · 0 评论 -
C语言与C++语言的不同 (C++一站到底)
在这一篇博客里,我会和大家一起初步的探索C语言与C++语言的区别。1 用到的文件后缀名不一样C语言 .c——>c工程—>c工程的编译器—>c语言语法处理C++语言 .cpp——>c++工程——>c++工程的编译器——>c++语法处理也就是说后缀名不同的 目的是制定合适的编译器2.变量的声明位置不同;C语言 必须在开头声明...原创 2018-06-20 16:45:11 · 306 阅读 · 0 评论 -
缺省参数
一;定义缺省参数指定一个默认值。在调用该函数时,如果没有指定参数则采用该默认值,否则使用指定的实参,如我们在函数中打印了参数,下面我们来看看结果吧我们可以看到打出来的参数值正是之前默认的值下面我们为函数指定一个参数再次打印可以看到这次打印的就是我们制定的值了。验证了本文的第一句话。二,缺省分为两类(全缺省半缺省)典型全缺省时典型...原创 2018-06-20 16:44:08 · 1036 阅读 · 0 评论 -
(c)面向过程与(c++)面向对象有什么区别
相信大家都有一定的了解,c语言是一个面向过程的语言,而c++是一个面向对象的语言,那么面向对象和面向过程有什么区别呢?各举一个例子吧C面向过程—>从面向过程的方向考虑就像我要开车我就要先开门,系安全带,打火 ,松手刹,挂挡,起步。我们关心的事是一个一个的动作(函数)。所以给出动作就可以了。C++面向对象—>从面向对象的方向考虑,开车要先有开车的人(会开车),属性;车,再...原创 2018-06-20 09:07:12 · 4928 阅读 · 0 评论 -
C++虚函数的作用及实现原理(四)(含有虚函数的类的对象模型之菱形继承)
上一篇https://blog.csdn.net/a15929748502/article/details/80941931中我们已经一起探索了含有虚函数较为普通是的多继承的对象模型,这一讲我们来一起看看菱形继承时的对象模型。(如果了解菱形继承可以参考这篇博文https://blog.csdn.net/a15929748502/article/details/80898126)下面就由我来构造...转载 2018-07-07 11:03:30 · 711 阅读 · 0 评论 -
类中的相互赋值
1,同类型对象之间的赋值:没有疑问这个是可以的。2,基类=派生类:也是可以的。3,派生类=基类;不合理的。原创 2018-07-23 15:54:49 · 1232 阅读 · 0 评论 -
模板的特化
首先要再提一下什么是模板,模板有什么作用? 模板是泛型编程的基础。所谓泛型编程是编写与类型无关的逻辑代码,是一种复用的方式,模板分为模板函数和模板类。编译调用模板函数或模板类时,编译器会根据传递的参数自动推演出模板形参的类型,并自动生成对应的代码。这是前面我们已经提到过的,下面我们来了解一下模板的特化,什么事特化呢,简而言之就是特殊化。 模板的特...原创 2018-08-28 19:56:00 · 269 阅读 · 0 评论 -
类模板的特化----类型萃取
类型萃取是什么呢?下面我来给出下面场景大家是否还记得前篇的String类的模拟实现,在扩容时我们说如果是内置类型就用memcpy。如果是自定义类型就用for 循环加上“=”号的重载(防止浅拷贝的发生)。 我们又如何判断是否为自定义类型呢?并让它去我们想要它执行的方式呢。这里我们应用类模板的特化,内嵌类型,函数重载给出了一种解决方式。请大家看下面代码:// 1. 通用的...原创 2018-08-27 08:33:27 · 226 阅读 · 0 评论 -
智能指针
智能指针:智能指针是RAII思想的一种应用,智能的管理类对象资源的申请和释放。目前有以下几种:C 98中提出auto_ptr(一个较为早期的版本(日常是不用的)解决拷贝构造(多次释放)的方法是管理权转移(以前的对象不再管理,把旧对象的管理空间的权限交给旧对象拷贝出的新对象,把旧对象管理空间的指针值交给新对象之后,把旧对象管理空间的指针赋为空),有效的避免了会出现多次释放,后来又有人提出...原创 2018-08-20 17:48:54 · 229 阅读 · 0 评论 -
String类的写法(引用计数于写时拷贝)
首先推荐大家可以看下陈皓大佬的博客,其实我看了之后是没有勇气写下去的,因为大佬写的实在是太精彩了,下面我分享一下自己的代码。引用计数 #include <iostream> 2 #include <string.h> 3 #include <assert.h> 4 class String 5 { 6 public...原创 2018-08-12 11:38:57 · 209 阅读 · 0 评论 -
String 类的现代写法,客官有兴趣吗
上一篇我们一起学习了String类的传统写法https://blog.csdn.net/a15929748502/article/details/81505333,现在我们一起来看看String 类的现代写法,下面的代码是我用现代写法实现的String类。 1 #include<iostream> 2 #include <string.h> 3 using ...原创 2018-08-08 14:47:11 · 195 阅读 · 0 评论 -
String 类的传统实现法,客官有兴趣吗
string类是我们日常引用较多的一个类,这个类有不少人模拟实现过,下面我也来模拟实现一把 1 #include <iostream> 2 #include <string.h> 3 using namespace std; 4 class String 5 { 6 public: 7 St...原创 2018-08-08 11:41:38 · 195 阅读 · 0 评论 -
用C++实现一个日期类
最近在复习C++的时候发现日期类是一个非常有用的类,在现实中是非常实用的(虽然我不知道为什么这么实用的类,库里没有)以下是我自己实现的日期类的代码,因为大部分都是运算符的重载,所以理解起来应该并不难#include <iostream>#include <assert.h>using namespace std;class Date{ frie...原创 2018-08-02 23:31:57 · 2347 阅读 · 1 评论 -
谈谈this指针
首先this指针是什么呢?this指针是一个指向当前对象的隐含的指针,每一个成员函数都有一个指针型参,他的名字是固定的,称为this指针(构造函数比较特殊,没有这个隐含的this指针)。编译器会对成员函数进行处理,在对象调用成员函数时,对象地址作为实参传递给成员函数的第一个形参this指针。this指针是成员函数隐含指针形参,是编译器自己处理的,我们不可以在成员函数的形参中添加this...原创 2018-07-26 08:12:57 · 157 阅读 · 3 评论 -
谈谈引用吧
什么是引用:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会 为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间 类型& 引用变量名(对象名) = 引用实体;什么时候用引用比较合适呢?1.引用做参数clude <iostream>using namespace std;void Swap1(int a,int b){ ...原创 2018-07-25 14:57:29 · 182 阅读 · 0 评论 -
谈谈C++中const的那些事
首先Const的作用是什么呢?大家知道const修饰一个变量之后所修饰的变量就只可以看而不可以改了。下面我们来看几个有关于const问题的例子。1有如下代码#include <iostream>using namespace std;int main (){ const int a=10; int& b=a;...原创 2018-07-25 07:38:08 · 319 阅读 · 0 评论 -
那些函数不可以作为虚函数呢?了解一下。
那些函数不可以定义为虚函数呢?现在就让我们了解一下。1.普通函数。2.友元函数。以上两个都不是类的成员函数4.静态成员函数;虚函数一定要通过对象来调,而静态成员函数不用(说明静态成员函数不在虚表之中)。5.构造函数;拷贝构造函数(构造函数还没有调就还没有对象,就没有指向虚表的指针,就不可以通过虚表去调用,这是一个先有鸡还是先有蛋的问题)6.但建议把析构函数给成虚函数(防止内...原创 2018-07-23 16:59:55 · 2687 阅读 · 0 评论 -
C++ primer读书笔记;(好吧,单纯是读书摘要,划重点)
C++ primer读书笔记; 从今天看C++ primer这本书我认为还是很有必要做一做读书笔记的。里面呢有一些自己的小发散,如果有错误欢迎大家指出。第一章,开始1.在大多数系统中,main的返回值被用来指示状态。返回0表成功,非0的返回值有系统定义,通常用来指出错误。2.类型(1)定义数据元素内容(2)定义这类数据可以进行的运算。3,ios...翻译 2018-06-07 18:47:18 · 279 阅读 · 0 评论