随笔分类 -  编程基础

指针和引用的区别
摘要:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来 的变量实质上是同一个东西,只不过是原变量的一个别名而已。如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指 针变量指向a的存储单 阅读全文
posted @ 2018-10-10 22:28 Mini_Coconut 阅读(1381) 评论(2) 推荐(0)
C++11特性-右值引用
摘要:什么是左值,什么是右值 常见的误区有 = 左边的是左值,右边的是右值。 左值:具有存储性质的对象,即lvalue对象,是指要实际占用内存空间、有内存地址的那些实体对象,例如:变量(variables)、函数、函数指针等。 右值:相比较于lvalue就是所谓的没有存储性质的对象, 也就是临时对象。 在 阅读全文
posted @ 2018-08-27 17:30 Mini_Coconut 阅读(423) 评论(0) 推荐(0)
++i和i++的区别
摘要:它们两个的数值变化的区别,我这里就不多说了 这里主要说明两者在效率上的区别 (1)首先如果是自带的数据类型,比如int型,++i和i++,编译器的实现方式是相同的,两者并没有效率上的区别,虽然也有副本的开销,但是一般编译器会优化。 (2)如果是自定义的数据类型,比如自己定义的类。这个时候两者就有了区 阅读全文
posted @ 2018-08-18 23:23 Mini_Coconut 阅读(368) 评论(0) 推荐(0)
菱形继承
摘要:菱形继承 主要出现在多重继承中。经常会出现的问题就是二义性。 上述代码中,老虎类和狮子类继承于动物这个基类,但是狮虎兽这个类同时继承于老虎类和狮子类,那么当出现下面的代码就会出现编译错误 因为编译器不知道该调用哪个父类的getWeight()函数,Liger多重继承了Tiger和Lion类,因此Li 阅读全文
posted @ 2018-08-18 23:12 Mini_Coconut 阅读(202) 评论(0) 推荐(0)
struct 和 class的区别
摘要:struct和class如果按照在C的时代,还是有很大差别的。 c中struct的定义如下: struct 结构名 { 成员表 }; 因为struct是一种数据类型,那么就肯定不能定义函数,所以在面向c的过程中,struct不能包含任何函数,如下所示: struct A { int length; 阅读全文
posted @ 2018-08-13 21:20 Mini_Coconut 阅读(219) 评论(0) 推荐(0)
重载运算符问题
摘要:关于运算符重载: 不允许用户自定义新的运算符,只能对已有的运算符进行重载 重载运算符不允许改变运算符原操作数的个数 重载运算符不能改变运算符的优先级 重载运算符函数不能有默认的参数,会导致参数个数不匹配 可以在类内实现,作为类的成员函数,也可定义为类的友元函数 当运算符重载函数作为类的成员函数时,要 阅读全文
posted @ 2018-08-04 22:54 Mini_Coconut 阅读(213) 评论(0) 推荐(0)
智能指针
摘要:首先为什么需要提出智能指针的概念,先看下这个例子 如果weird_thing()返回1,程序直接抛出异常,那么ps这个指针便不能被执行到,当程序执行完之后,ps指针本身所占的内存会被释放,但是ps所指的内存将不被释放。这就是所谓的内存泄漏,指针没了,但是所指向的内存没有被释放。 我们可以想到,如果p 阅读全文
posted @ 2018-07-30 16:30 Mini_Coconut 阅读(189) 评论(0) 推荐(0)
C++中的explicit
摘要:首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 上面的代码中, "CxString string2 = 阅读全文
posted @ 2018-07-29 21:59 Mini_Coconut 阅读(161) 评论(0) 推荐(0)
C++的memset
摘要:1. 需要的头文件 C中为<memory.h> 或 <string.h> C++中为<cstring> 为地址ptr开始的num个字节赋值value,注意:是逐个字节赋值,ptr开始的num个字节中的每个字节都赋值为value。 (1) 若ptr指向char型地址,value可为任意字符值; (2) 阅读全文
posted @ 2018-07-26 11:51 Mini_Coconut 阅读(237) 评论(0) 推荐(0)
VS2010下如何查看类的内存布局
摘要:用VS2010查看类的内存布局,这里用两种方法 (1)MSVC有个隐藏的“/d1”开关,通过这个开关可以查看项目中类的内存布局情况。 修改项目属性,添加”/d1 reportSingleClassLayoutCC”开关,表示需要查看类CC的内存布局。 /d1 reportAllClassLayout 阅读全文
posted @ 2018-07-12 19:56 Mini_Coconut 阅读(1630) 评论(0) 推荐(0)
关于虚继承的sizeof问题
摘要:首先关于虚继承和普通继承的知识,我总结一下: 1.普通继承时,无论派生类是否定义新的虚函数,基类和派生类总是共享一个虚函数表,不需要另加指向虚函数的指针,派生类只是将虚函数表中的元素改成了派生类的地址而已,虚函数表还是一个,指针数量也没有增加。2.虚继承时,若是派生类只是继承或重写基类中虚函数,则基 阅读全文
posted @ 2018-07-12 19:31 Mini_Coconut 阅读(502) 评论(0) 推荐(0)
C++中二维数组作为函数参数
摘要:在平时,我们经常会遇到将整个数组作为函数参数的情况,一维数组的情况,就是用数组名当形参和实参,传递的是数组的首地址。二维数组我们用的也很多,但是总是有各种问题,今天我总结一下 有个很重要的一点,字符串“China”在编译器眼里就是一个地址!操作字符串是通过它在内存中的存储单元的首地址进行的,这是字符 阅读全文
posted @ 2018-07-09 22:12 Mini_Coconut 阅读(5164) 评论(0) 推荐(0)
C++含有无符号类型的表达式的计算
摘要:unsigned u=10; int i=-42; cout<<i+i<<endl; cout<<u+i<<endl; 在第二个输出表达式中,相加前首先把整数-42转换成无符号数,把负数转换成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模。(如果int占32位,则模为2^3 阅读全文
posted @ 2018-07-07 21:01 Mini_Coconut 阅读(272) 评论(0) 推荐(0)
为什么构造函数内部不能调用虚函数
摘要:其实也不是不能调用,调用自然是可以的,只不过构造函数中的虚函数不具有多态性,不能达到我们想要的效果。 我们一般想让它输出 A::Fuction A::Fuction 但其实实际输出为 Base::Fuction A::Fuction 给出的原因是说构造基类的时候,还未初始化派生类的成员变量。而网上很 阅读全文
posted @ 2018-07-07 17:35 Mini_Coconut 阅读(459) 评论(0) 推荐(1)
虚函数的底层实现机制、虚函数内存布局以及虚函数局限
摘要:虚函数的内存布局以及局限,请参照下面网址的介绍,很详细很精彩 https://blog.csdn.net/lixungogogo/article/details/51138493 C++在基类中声明一个带关键之Virtual的函数,这个函数叫虚函数;它可以在该基类的派生类中被重新定义并被赋予另外一种 阅读全文
posted @ 2018-07-07 17:15 Mini_Coconut 阅读(680) 评论(0) 推荐(0)
向上强制转换和向下强制转换
摘要:在C++的继承中,基类和派生类的指针,引用的题目我们都见的很多。前面我也总结过基类指针和派生类指针调用函数的机制。 将派生类引用或指针转换为基类引用或指针被称为向上强制转换(upcasting)即基类指针指向了派生类对象,或者将派生类对象强制转换成了基类指针指向了 与向上强制转换相反,将基类指针或引 阅读全文
posted @ 2018-07-07 16:33 Mini_Coconut 阅读(909) 评论(0) 推荐(0)
C++中overload 、override、overwrite 之间的区别
摘要:Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。 Override(覆盖):是指派生类函数覆盖基 阅读全文
posted @ 2018-07-05 22:17 Mini_Coconut 阅读(732) 评论(0) 推荐(0)
什么是内存泄漏,野指针,如何避免
摘要:内存泄漏:①访问已经释放的内存 ②访问没有权限的内存 野指针:指向内存被释放的内存或者没有访问权限的内存的指针。 “野指针”的成因主要有3种:(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指 阅读全文
posted @ 2018-07-05 17:30 Mini_Coconut 阅读(608) 评论(0) 推荐(1)
为什么内存分配中栈要用栈这个数据结构
摘要:这个问题很拗口,更拗口的说法是:为什么栈是栈 总的来说,就是内存分配中的栈内存为什么要用栈这个先进后出的数据结构 栈内存一般存储的是函数的调用信息和函数中申明的变量,因为函数的调用是递归的,外层函数一定比内层被调用的函数先加载和执行,而一定等到内层被调用函数结束后才能结束,这个先进后出的机制就是为什 阅读全文
posted @ 2018-07-05 11:46 Mini_Coconut 阅读(701) 评论(0) 推荐(0)
C、C++语言中参数的压栈顺序
摘要:要回答这个问题,就不得不谈一谈printf()函数,printf函数的原型是:printf(const char* format,…) 没错,它是一个不定参函数,那么我们在实际使用中是怎么样知道它的参数个数呢?这就要靠format了,编译器通过format中的%占位符的个数来确定参数的个数。 现在我 阅读全文
posted @ 2018-07-05 11:35 Mini_Coconut 阅读(2171) 评论(0) 推荐(1)