
C++笔记
文章平均质量分 66
BoomHusky
计算机专业硕士,希望自己的实力能够更强
展开
-
C++笔记 | C++ 面试题:给类重载赋值操作符
比如以下是CMyString的声明,请为该类添加赋值操作符Class CMyString{Public:CMyString(char *pDatra = nullptr);CMyString(constCMyString &str);~CMyString(void);Private:Char * m_pData;};为这个函数重载一个赋值操作符在为这个类重载赋值操作符的时候首先需要注意一下...原创 2018-03-22 14:46:32 · 530 阅读 · 0 评论 -
C++笔记 | C++中的虚拟继承的作用及实现原理
虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。 其实虚拟继承和虚拟函数是完全没关系的,比如B继承自A,C继承自A...原创 2018-04-04 15:20:02 · 1882 阅读 · 1 评论 -
C++笔记 | C++ 如何定义一个只能在堆上(栈上)生成对象的类
在C++中,类的对象的建立分为两种,一种是静态建立,比如A a;一种是动态建立,比如A * a=new A();对于静态建立而言,编译器将栈顶指针的位置分配给a,并且直接调用a的构造函数,将栈顶指针后移,而对于动态建立而言,编译器搜索堆中可用的空间,将它分配给a,然后间接调用a的构造函数来构造a1.如何将类只能初始化在堆上 容易想到将构造函数设为私有。在构造函数私有之后,无法在类外部调用构造函数...原创 2018-04-03 10:34:05 · 886 阅读 · 0 评论 -
C++笔记 | C++结构体占有空间计算
首先需要明白,64位系统,不同变量占有的空间为 char :1个字节 char*(即指针变量): 8个字节 (32位系统为4字节) short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 8个...原创 2018-03-21 16:09:08 · 429 阅读 · 0 评论 -
C++笔记 | C++中的多态
在C++中,多态分为两种通用的多态和特定的多态。两者的区别是前者对工作的类型不加限制,允许对不同类型的值执行相同的代码;后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的代码。通用多态又分为参数多态(parametric)和包含多态(Inclusion Polymorphism);特定多态分为重载多态(overloading)和强制多态(coercion)参数多态:采用参数化模板,通过...原创 2018-03-23 14:26:12 · 209 阅读 · 0 评论 -
C++笔记 | C++笔试题:判断某个函数的运行时间
int f(int x) { int s=0; while(x-->0) s+=f(x); return max(s,1);} 判断f(35)的运行时间是以分为单位,以秒为单位还是以毫秒为单位首先需要知道现代计算机的运行时间大约是每秒1亿次,然后将这个函数展开,大概是这样F(35)=2^0f(34)+2^1f(33)+2^2f(32)……s^34f(0),假设函数每次运...原创 2018-03-23 13:58:45 · 519 阅读 · 0 评论 -
C++笔记 | C fopen函数 fwrite函数 rewind fseek fscanf fprintf等文件操作函数
首先是fopen函数和printf一样,需要cstdio头文件原型为FILE * fopen(const char * path,const char * mode); 返回一个FILE类型指针Path为调用路径,mode为调用方式,共有一下几种方式: -- mode: 文件打开方式,例如: "r" 以只读方式打开文件,该文件必须存在。 "...原创 2018-03-23 13:22:24 · 432 阅读 · 0 评论 -
C++笔记 | C语言strcpy函数分析与实现
对于C语言和C++的char数组而言,当给其赋值的时候必须比给的字符串多一位,因为char数组需要一位来存储/0当这样char a[3] = { 'a','b','c' }; cout<<a;的时候会输出乱码,因为a没有位置存储/0了,同时char * a = {‘a’,’b’,’c’}这种数组的声明方法也是错误的然后关于strcpy(char * a,const char * b)这...原创 2018-03-19 13:06:22 · 521 阅读 · 0 评论 -
C++笔记 | C++数组指针和指针数组
Char (*p)[10]为数组指针,实际上相当于二维数组,也就是指向一个一维数组的指针P可以单独看做指向数组的指针比如这样 int (*b) [2]; int cc[2][2] = { { 1,2 }, { 3,4 }, } ; ...原创 2018-03-19 13:05:03 · 384 阅读 · 0 评论 -
C++笔记 | C++构造函数隐式调用
对于这个函数而言,输出的是short为什么呢,为何不是operator呢首先这设计到一个隐式构造函数的调用class Test1{public: Test1(int n) { num=n; }//普通构造函数private: int num;};class Test2{public: explicit Test2(int n) { num=n; ...原创 2018-03-19 13:04:26 · 4153 阅读 · 0 评论 -
C++笔记 | C++ 类所占的空间大小统计方法
32位机器上,有三个类A B C定义如下, 请确定sizeof(A) sizeof(B) sizeof(C)的大小顺序. struct A{ A() {} ~A() {} int m1; int m2; }; struct B:A{ B() ...原创 2018-03-19 13:02:49 · 750 阅读 · 0 评论 -
C++笔记 | C++ dynamic_cast函数分析
dynamic_cast<>用于C++类继承多态间的转换,分为:1.子类向基类的向上转型(UpCast)2.基类向子类的向下转型(DownCast)其中向上转型不需要借助任何特殊的方法,只需用将子类的指针或引用赋给基类的指针或引用即可,dynamic_cast向上转型其总是肯定成功的。 而向下转换时要特别注意:dynamic_cast操作符,将基类类型的指针或引用安全的转换为派生类的指...原创 2018-03-19 13:00:10 · 430 阅读 · 0 评论 -
C++笔记 | C++ 11新特性nullptr使用,常数表达式constexpr,类型推导auto和decltype
nullptr nullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char*ch=NULL;时,NU...原创 2018-05-04 10:29:05 · 1401 阅读 · 0 评论