随笔分类 -  C++

摘要:今天在linux下编译一个cpp文件时,报出了一个奇怪的错误:arning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 改了好一会也不知道哪出问题了,一度怀疑人生.... 原来,当g++编译版本比较 阅读全文
posted @ 2019-03-16 21:26 leoncumt 阅读(6784) 评论(1) 推荐(2)
摘要:我们知道,线程的创建方式有三种:通过函数入口创建,通过类对象创建,通过lambda表达式创建。 在创建线程的同时,可以同时传递多个参数,传参方式有以下几种: 1.传入函数参数 可以看到,使用join()函数,让主线程等待子线程执行完毕,主线程再输出。join的好处是使程序受我们自己控制。输出是: 2 阅读全文
posted @ 2019-03-10 16:12 leoncumt 阅读(3826) 评论(0) 推荐(0)
摘要:静态绑定和动态绑定是C++多态性的一种特性。 1、对象的静态类型和动态类型: 对象的静态类型: 对象在声明是采用的类型,在编译期确定; 对象的动态类型: 当前对象所指的类型,在运行期决定,对象的动态类型可以更改,但静态类型无法更改。 2、静态绑定和动态绑定 静态绑定: 绑定的是对象的静态类型,某特性 阅读全文
posted @ 2019-03-07 19:45 leoncumt 阅读(3029) 评论(0) 推荐(0)
摘要:上一篇说到了virtual关键字的使用范围以及虚函数。 先上一段代码: 输出是: 我是父类的构造函数我是子类1的构造函数~我是父类的析构函数 可见子类的析构函数并未被调用,因为delete掉的是指向父类的指针,子类的对象还是仍然存在,这是很危险的,子类的那一片内存空间并未被释放。 想要同时调用子类的 阅读全文
posted @ 2019-03-07 19:42 leoncumt 阅读(132) 评论(0) 推荐(0)
摘要:上一篇说到了virtual关键字的使用范围以及虚函数。 先上一段代码: 输出是: 我是父类的构造函数我是子类1的构造函数~我是父类的析构函数 可见子类的析构函数并未被调用,因为delete掉的是指向父类的指针,子类的对象还是仍然存在,这是很危险的,子类的那一片内存空间并未被释放。 想要同时调用子类的 阅读全文
posted @ 2019-03-07 19:41 leoncumt 阅读(329) 评论(0) 推荐(0)
摘要:写一个字符串拷贝函数,之前在笔试遇到过,发现这里面还有一些需要注意到的地方,故做以记录; 1.实现一个字符串拷贝功能,需要指向源串和目的串的指针,当遇到源串的值为‘\n’,表示拷贝结束 void strcpy(char* destStr,char* srcStr){ while((*destStr+ 阅读全文
posted @ 2019-03-07 08:03 leoncumt 阅读(506) 评论(0) 推荐(0)
摘要:使用指针的指针: 对于int **pp1 = &p1; 我们可以理解成取得p1的地址赋值给指针pp1,*pp1就是p1,**pp1就是val1。用下面的图来表示就是: 现在改写 *pp1 = p2 ,就是将p2存放的地址赋值给了p1,现在p1指向的地址为val2的值,所以现在int num= *p1 阅读全文
posted @ 2019-03-04 22:31 leoncumt 阅读(549) 评论(0) 推荐(0)
摘要:对于虚函数的相关概念,我打算分两部分来分析,上篇是虚函数和纯虚函数。 记得毕业那会有一次面试,面试官问我面向对象的三大特征是什么,那必须是封装、继承、多态啦,可是再进一步问我多态是什么概念,主要是用什么来实现多态的,我就含糊其辞了。 首先来说一下虚函数的关键字virtual: virtual用来修饰 阅读全文
posted @ 2019-02-27 08:18 leoncumt 阅读(767) 评论(0) 推荐(0)
摘要:对于含指针的类,当编译器调用默认的拷贝构造函数时,会将对象的指针所指向的地址拷贝给另一个对象的指针所指向的地址,这个时候就发生了浅拷贝。浅拷贝所存在的问题是:如果只是指针指向的地址进行拷贝,那么两个指针将指向同一片内存空间,当其中一个对象被销毁时,对应的析构函数会delete掉这片内存,那么另一个对 阅读全文
posted @ 2019-02-25 01:47 leoncumt 阅读(131) 评论(0) 推荐(0)
摘要:拷贝构造函数,拷贝赋值函数,析构函数这三个函数被称为类中的big three。 拷贝构造函数:当我们创建一个对象时,调用构造函数,如果一个对象去初始化同类对象,这个时候就需要使用到拷贝构造函数,目的是将目标对象的成员变量拷贝给另一个对象。 值得注意的是,如果类的成员变量里不涉及指针,我们则不需要显示 阅读全文
posted @ 2019-02-25 01:16 leoncumt 阅读(357) 评论(0) 推荐(0)
摘要:先说一下不能被重载的五个操作符: ps:对成员指针访问运算符比较陌生,在这里记录一下:成员指针访问运算符,通常是指向一个类的成员。 下面例子说明了成员指针 .* 的用法,当使用对象或对象的引用来范围类的成员时,必须用.*: 如果指向对象的指针来访问对象的成员,那么必须使用 ->* 运算符,上面的程序 阅读全文
posted @ 2019-02-14 08:24 leoncumt 阅读(149) 评论(0) 推荐(0)
摘要:1.在类中声明构造函数,如果构造函数的参数需要初始化,最好在函数声明的时候使用构造函数独有的初始化方式,不要在函数体内再进行初始化,这样可以提高程序的运行效率,具体如下: 2.数据都放在private里面,这也体现了c++的三大特性之一:封装 3.参数能通过引用传递就不要用值传递。因为值传递的方式传 阅读全文
posted @ 2019-02-12 23:55 leoncumt 阅读(308) 评论(0) 推荐(0)
摘要:内联能提高函数的执行效率,为什么不把所有的函数都定义成内联函数?如果所有的函数都是内联函数,还用得着“内联”这个关键字吗?内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联 阅读全文
posted @ 2019-02-12 22:23 leoncumt 阅读(662) 评论(0) 推荐(0)