C++
文章平均质量分 82
XDmonkey
这个作者很懒,什么都没留下…
展开
-
预编译的不同形式和辨析整理
预编译又称为预处理,简单来说可以认为是做一些代码文本的替换工作,我们最常见的一种就是宏定义和#include类型,预编译过程中处理的是#开头的指令,最常见的预编译指令有: 1、#include指令 如果是用<>括起来的文件那么就在系统的include目录中寻找文件,如果用""括起来就表示在当前目录中寻找文件(多是程序员自己编写),一般来说,多以h或者cpp为后缀,另外需要注意的是如原创 2016-02-01 15:28:18 · 756 阅读 · 0 评论 -
空悬指针、野指针、内存泄漏、内存溢出
在C语言中,指针的功能十分强大,这使得在C中程序员对于指针的使用要十分地谨慎。那么首先我们对于指针的使用就是要对空悬指针(dangling pointer)和野指针进行避免。 首先我们介绍空悬指针,空悬指针指的是一个指针,当它指向的对象已经被释放的时候而自身却没有被置为null的时候,那么这个指针就会变成一个空悬指针。而野指针,通俗的表示就是没有进行初始化的指针,但是因为一个指针没有初始化的原创 2016-04-17 20:56:10 · 3543 阅读 · 2 评论 -
初始化与赋值之间的区别
由于在内置类型中,初始化和赋值不进行区分并不会造成很大的影响,所以让我很大程度上忽略了他们的差别。 直到C++primer中对于构造函数提出了一句话,构造函数有一个初始化部分和一个函数体,在一个构造函数中,成员的初始化是在函数体执行之前完成的,且按照它们在类中出现的顺序进行初始化。让我第一次开始思考初始化和赋值操作之间的区别。 首先我们看构造函数的两种写法 “赋值”写法:原创 2016-03-28 21:25:55 · 6246 阅读 · 0 评论 -
关于构造函数的两三事
构造函数分为很多种,我这里可以大致分为默认构造函数、普通的构造函数和复制构造函数三种。我们需要知道的一点是,多数非内置类型是用构造函数来进行初始化的,其中很多初始化过程并没有使用参数,那么也就是说大部分非内置类型的初始化是依赖于默认构造函数的,但是实际上默认构造函数并不一定是没有参数的,我们知道我们在定义函数的时候是可以在参数表中制定参数的值的,意思用来表达:如果你在使用本函数的时候,在参数表中自原创 2016-04-20 14:58:19 · 644 阅读 · 0 评论 -
三五法则以及行为像值的类和行为像指针的类
看C++primer中,看到行为像值的类和行为像指针的类中,实际上思路非常的简单,对于行为像值的类而言,实际上就是每个实例化的对象都有一份备份,那么每个实例化的对象如果申请了默认析构函数没有办法析构的类外空间的时候(比如在类中有string或者一些动态申请内存的容器的时候)就需要各自单独释放,这种释放实际上不仅仅是要写进单独的析构函数中,比如我们在重载赋值操作符(=)的时候也需要单独的释放空间。我原创 2016-04-04 14:28:46 · 2570 阅读 · 2 评论 -
因为类中写静态成员而得到的一点感悟
在考试中,由于经常看到一个静态变量定义在一个函数中,然后多次调用这个函数通过考察多次调用的时候这个变量的值来考察静态变量,这样的考察方式先入为主的奠定了自己对于静态变量的印象。(实际上这仅仅是静态变量中比较特殊的一类,我们称为局部静态变量)而且自己有的时候有一个不好的习惯就是将类写在main函数中。然后自己在写一个类的时候就出现了报错现象。代码如下:#includeusing namespa原创 2016-04-22 15:15:04 · 550 阅读 · 0 评论 -
从一道题谈C++中构造函数调用构造函数
#include #include using namespace std;struct CLS{ int m_i; CLS( int i ) : m_i(i){} CLS() { CLS(0); }};int main(){ CLS obj; cout << obj.m_i << endl; sys转载 2016-06-12 13:17:53 · 566 阅读 · 0 评论 -
动态链接和静态链接
1、讲到类和结构体的不同的时候,可能会说类里面的成员和结构体里的成员默认状态是不一样的,可能会说由于C++的特性,因而类具有了继承、封装和多态等多种特性。但是还有一个除却功能性上底层区别之外的习惯用法区别就是: 对于代码较大的成员函数来说,直接把代码放在类中定义存在两个问题:一是使用起来很不方便,二是破坏了信息隐藏机制。 那么为什么说将代码放在类中定义会破坏信息隐藏机制呢? 实际原创 2016-03-04 23:00:31 · 412 阅读 · 0 评论 -
const和static的作用辨析以及const和static的区别
首先字面上理解,const是只读的意思,static是静态的,点击打开链接转载 2016-02-01 21:12:07 · 1270 阅读 · 1 评论 -
C++中关于类(封装、继承、多态)区别于结构体的理解
我们讲C++区别于C,首先要讲的就是struct和class之间的区别。对于没有任何private/public/protected声明的变量,struct默认为public,而class中是默认为private。这使得对于一般的变量而言,原创 2016-03-03 23:37:52 · 740 阅读 · 0 评论 -
默认构造函数和合成默认构造函数
当我们没有为类中的对象提供初始值,此时就会执行默认初始化,类会通过一个特殊的构造函数来控制默认初始化过程,这个函数叫做默认构造函数,这个函数并不需要任何的实参,但是如果我们的类没有显式地定义构造函数,那么编译器就会为我们隐式地定义一个默认构造函数(只要没有显式定义构造函数,编译器就会提供默认构造函数,如果为类中的对象提供了初始值的话,就不会控制默认初始化过程了)。 实际上,默认构造函数并不一原创 2016-03-25 16:41:20 · 2586 阅读 · 0 评论 -
关于this指针
关于C++对象中的隐式定义的this指针,有这样一句说明: 注:以下对象针对类和结构体; this指针指的是:一个对象的this指针并不是对象本身的一部分,但并不会影响sizeof(对象)的结果,this的作用域是在类内部,当在类的非静态成员函数访问类中的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。 首先,在这一段话中特意强调了静态这两个字,我们原创 2016-03-22 14:12:39 · 602 阅读 · 0 评论 -
printf和cout的区别详述
#includeusing namespace std;int main(){cout<<"Hello,World!"<return0;} 由于以前学过C,所以这段代码的其它部分在我看来都还算“正常”,然而cout却很独特:既不是函数,似乎也不是C++特别规定出来的像if,for一类有特殊语法的“语句”。由于只是初步介绍,所以那本书只是简单的说cout是C++中的“标准输入输原创 2016-03-23 00:48:50 · 47502 阅读 · 8 评论 -
如何分辨拷贝构造函数和赋值操作符两种操作
看到关于拷贝控制的内容的时候对于拷贝构造函数(又称复制构造函数)和用赋值操作符来对对象赋值的两种操作产生了疑问,到底什么时候是属于拷贝构造函数的范围,又有哪些时候是属于赋值构造函数的范围呢? 首先拷贝构造函数是属于构造函数的一种,如果我们没有为一个类定义拷贝构造函数的话,编译器会为我们隐式定义一个,与合成构造函数不同的是,即使我们定义了其他的构造函数,编译器因为会为我们合成一个拷贝构造函数(原创 2016-03-29 16:06:03 · 1159 阅读 · 1 评论 -
对于友元重载方式和成员函数重载方式的选择
今天看C++primier第五版494页下面有一段叙述: 与iostream标准库库兼容的输入输出运算符必须是普通的非成员函数,而不能是类的成员函数。否则,它们的左侧运算对象将是我们类的一个对象。原因倒是非常简单,因为如果重载函数是作为类中的一个非静态对象的话,就必须通过一个已经被实例化的类来调用,如果仅仅是作为一个友元函数的话,那么直接调用就可以了。 那么对于前者,很明显地可以知原创 2016-03-22 23:57:07 · 1922 阅读 · 0 评论 -
new和malloc的区别
我们都知道,对于new和malloc都可以用于动态内存的分配,但是实际上他们又有哪些区别呢? 1、首先,new是运算符,和delete配套使用,他们都并不属于库函数,而malloc是标准库函数,与free配套使用。都可以用于动态申请内存和释放内存 2、对于一般的malloc函数,举例如下进行运用char *p=(int *)malloc(sizeof(char)*5);mallo原创 2016-04-05 23:57:04 · 370 阅读 · 0 评论 -
从网上找到的聊天室代码看epoll相关的API
拿一个聊天室的demo来讲一下Socket网络编程中的epoll相关的api的使用server端代码://server.cpp#include <iostream>#include <list>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>...原创 2018-04-19 21:02:12 · 339 阅读 · 0 评论