随笔分类 -  C++

1 2 3 4 5 ··· 7 下一页
C++ 代码换行
摘要:1、字符串太长,换行显示,怎么办?2、使用反斜杠,如下: string str = "abcd\ 1234"; 注意:反斜杠后面不准有任何字符。下一行开头的制表符不包含在整个字符串中,但是下一行开头的空格符包含在整个字符串中。3、使用双引号,如下: string str = "abcd" ... 阅读全文
posted @ 2015-07-26 13:31 Andy Niu 阅读(14512) 评论(0) 推荐(0) 编辑
C 语言宏定义
摘要:C 语言宏定义1、例子如下: #define PRINT_STR(s) printf("%s",s.c_str()) string str = "abcd"; PRINT_STR(str); 结果如下:abcd2、现在我期望打印出,str=abcd, 容易想到的解决办法是: #define PRIN... 阅读全文
posted @ 2015-07-26 13:28 Andy Niu 阅读(1198) 评论(0) 推荐(0) 编辑
函数调用的栈信息
摘要:/*1、栈在堆上面,栈的地址减少,堆的地址增加。2、方法的参数在栈上,参数是从右向左入栈,为什么? 主要是为了解决可变参数的问题,从右向左入栈,栈顶是第一个参数, 而第一个参数,指出了参数个数,或者推断出参数个数(printf 的格式化字符串)。 从栈顶开始,可以遍历这些参数。3、pa本身也分配在栈... 阅读全文
posted @ 2015-07-26 13:21 Andy Niu 阅读(422) 评论(0) 推荐(0) 编辑
C++ 函数对象
摘要:1、考虑下面的需求,从集合中找到一个与当前Student相等的学生,如下:int main(int argc, char* argv[]){ Student s1(20,"Andy"); Student s2(23,"Bill"); Student s3(28,"Caroline"); Studen... 阅读全文
posted @ 2015-07-05 19:08 Andy Niu 阅读(1611) 评论(0) 推荐(0) 编辑
C++ traits技术
摘要:1、技术的发明是为了某个问题,traits也是一样。考虑下面的需求。2、对两个变量相加,为了通用,使用模板方法,实现编译时多态。如下:template T Add(T a,T b){ //...}3、对于int,double实现是一样的,直接相加就行了。但是对于char*,我们期望内容相加,返回一个... 阅读全文
posted @ 2015-07-05 10:37 Andy Niu 阅读(799) 评论(0) 推荐(0) 编辑
C++ 对象的定义
摘要:1、考虑下面的方法void Print(const Student& s){ printf("Student[%s:%d]\n", s._Name.c_str(), s._Age);}2、方法Print接收一个Student对象,定义Student对象,并调用方法,有哪些方式?方式一: Stud... 阅读全文
posted @ 2015-07-05 10:31 Andy Niu 阅读(607) 评论(0) 推荐(0) 编辑
C++ 函数适配器
摘要:1、考虑下面的需求,在一个int的vector中,找出一个比5的元素,容易想到的解决办法,定义一个方法对象,使用模板,如下:vector::iterator iter = find_if(intVec.begin(),intVec.end(),Finder(3));2、分析find_if的伪代码如下... 阅读全文
posted @ 2015-07-05 10:30 Andy Niu 阅读(1583) 评论(0) 推荐(0) 编辑
memory拷贝与string拷贝的区别
摘要:1、memory拷贝,根据拷贝的字节个数,从src一个一个字节拷贝到dst,拷贝过程不管src的取值,也不管dst是否能容纳。2、因此,对于memory拷贝,src中NULL字符(取值为0的字符)后面的字符也能拷贝过去。不管dst是否能容纳,都拷贝过去,会存在踩内存。为了避免踩内存,拷贝的字节个数,... 阅读全文
posted @ 2015-06-27 20:38 Andy Niu 阅读(3102) 评论(0) 推荐(0) 编辑
其原因可能是堆被损坏,这也说明 xxx.exe 中或它所加载的任何 DLL 中有 bug
摘要:1、代码如下: string src ="abcdabcd"; char* dst = new char[8]; strcpy(dst,src.c_str()); delete[] dst;2、在release模式下,报错 其原因可能是堆被损坏,这也说明 xxx.exe 中或它所加载的任何 DLL ... 阅读全文
posted @ 2015-06-27 20:37 Andy Niu 阅读(2271) 评论(0) 推荐(0) 编辑
struct的初始化
摘要:1、struct的初始化可以使用类似数组的方式,如下:struct Student{ int _Age; string _Name;};Student stu = {26,"Andy"};2、有两个地方需要注意: a、顺序要保持一致,如下: Student stu = {"Andy",26... 阅读全文
posted @ 2015-06-27 20:26 Andy Niu 阅读(472) 评论(0) 推荐(0) 编辑
C++ 多态的原理
摘要:1、多态解决什么问题? 面向抽象编程,用户不需要关心引用或者指针的真实类型,已经内部实现。2、C++ 要具备多态的性质,满足两个条件:表面类型和真实类型不一样,方法是虚方法。3、多态是如何实现的? 实现多态就是要解决下面的问题,把子类对象当做父类对象来解释,还要保证调用的是子类的方法。4、实现原理是... 阅读全文
posted @ 2015-06-14 19:52 Andy Niu 阅读(669) 评论(0) 推荐(0) 编辑
stl 迭代器失效
摘要:1、对于基于连续内存的容器,容器元素的增删,有可能会导致迭代器的失效。考虑:int main(int argc, char* argv[]){vector intVec;intVec.push_back(1);intVec.push_back(2);intVec.push_back(3);vecto... 阅读全文
posted @ 2015-06-14 19:51 Andy Niu 阅读(472) 评论(0) 推荐(0) 编辑
C++ 容器元素的存储和获取
摘要:1、存储对象,存储的是对象的副本,并不是原对象。2、获取对象,获取的是对象的引用,为什么要这样设计?a、存储对象只发生一次,而获取对象往往会有多次,获取对象,如果每次都返回对象的副本,这个开销很大。b、考虑下面的情况,修改容器中的对象,如果获取对象,返回的是副本而不是引用,没有办法修改容器中元素的值... 阅读全文
posted @ 2015-06-14 19:50 Andy Niu 阅读(2543) 评论(0) 推荐(1) 编辑
【C++沉思录】代理类
摘要:1、考虑下面的需求,把一组类型不同,但是相互关联的对象放入容器中,比如Animal,Dog,Cat对象。2、容器只能包含一组 类型相同的对象,Animal,Dog,Cat对象是没有办法放入容器中的。3、怎么解决上面的问题?假设容器为vector,可以使用vector,这会导致一个新问题,因为vect... 阅读全文
posted @ 2015-06-14 19:49 Andy Niu 阅读(332) 评论(0) 推荐(0) 编辑
C++ 纯虚方法
摘要:1、纯虚方法解决什么样的问题,为什么要设计出纯虚方法? 考虑下面的需求,基类声明了一个方法,这个方法只针对具体的子类才有意义,比如Animal的Eat()方法,调用Animal的Eat方法是没有意义的。比如Dog吃肉,Cat吃鱼,而Animal吃什么呢,没有意义。2、既然Animal调用Eat没有意... 阅读全文
posted @ 2015-06-12 22:04 Andy Niu 阅读(1614) 评论(0) 推荐(0) 编辑
C++ 构造与析构的执行顺序
摘要:1、代码如下:class A{public: int _Id; A():_Id(0) { printf("A[%d]\n",_Id); } ~A() { printf("~A[%d]\n",_Id); }};class B{public: A _A; A* _PA; B() { printf... 阅读全文
posted @ 2015-05-30 17:40 Andy Niu 阅读(871) 评论(0) 推荐(0) 编辑
strcpy与strncpy
摘要:char aa[]="123456789123456789123456789";char bb[4]={0};1、strcpy(bb,aa); bb的空间,不能存下aa的内容,导致踩到aa的内存。如何解决这个问题?2、使用strncpy,如下: strncpy(bb,aa,sizeof(bb)); ... 阅读全文
posted @ 2015-04-04 10:00 Andy Niu 阅读(354) 评论(0) 推荐(0) 编辑
C++ 踩内存
摘要:1、从上往下,栈在堆上面(记忆方法:站在堆上面),二者向里压缩,也就是说,栈地址减少,堆地址增加。栈顶是小地址。2、模拟踩内存,让程序崩溃。代码如下:int main(int argc, char* argv[]){ int a = 263; int* pa = &a; char tmp[4]="a... 阅读全文
posted @ 2015-04-03 23:59 Andy Niu 阅读(1699) 评论(0) 推荐(0) 编辑
大端和小端
摘要:1、大端小端容易迷惑,记忆方法:地址从左向右是增加,我们平时的计数方式是大端。 而我们平时的计数,从左向右是高位到低位,是减少,也就是说,大端相反。2、字节是计算机存储的最小单元,字节本身可以认为是大端,因为19,表示为13。多字节表示一般是小端,比如:275,表示为13 01。前面的13对应19,... 阅读全文
posted @ 2015-04-03 23:03 Andy Niu 阅读(282) 评论(0) 推荐(0) 编辑
栈上数组,做了什么事?
摘要:考虑 char tmp[7] = "abcd"; 做了什么事?1、按道理,堆栈指针需要在栈顶挪出7个字节,但是为了字节对齐,栈顶指针会挪出8个字节,最高地址的一个字节不使用,是cc,注意:栈的使用,地址是减小的。2、tmp就是栈顶指针的别名,是个常量,不能修改指向。3、从栈顶向高地址拷贝a,b,c,... 阅读全文
posted @ 2015-04-03 23:00 Andy Niu 阅读(1089) 评论(0) 推荐(0) 编辑

1 2 3 4 5 ··· 7 下一页