随笔分类 - C/C++
存放一些学习C/C++过程中的感悟
摘要:写在前面的话:虽然这段代码中对于指针的使用是不正确的,但是我却在这个不正确的代码中发现了另一个错误,而且深感迷惑,所以打算将此博文推到首页,请各位帮忙回答个问题。在项目中用到了以下一段代码,执行结果有点奇怪,还没有想明白为什么会这样子是在网络编程中用到的,因为需要根据新加入的用户IP和已经存在的用户列表中的用户IP进行比对,来判定该用户是否已经存在,所以就使用了上述办法,但是执行结果出人意料,因为if(0 == strcmp(newIp, oldIp))这行代码永远为真,为什么呢?自己就跟踪代码调试,结果当执行过第二个红线那一行之后,newIp的值也发生了改变,而且newIp和oldIp指向的
阅读全文
摘要:C++中类的构造函数的调用有四种形式C++中对象的实例化有四种情况:1、调用默认构造函数。2、隐式调用构造函数3、显示调用构造函数4、使用new操作符如图所示,前三种在对象的作用域之外就会被系统自动销毁,调用析构函数。最后一个必须显示的使用delete来释放内存,但是需要注意的是,delete只是释放了指针指向的内存,但是指针依然指向那个地址,所以释放内存之后应该把指针设为NULL。
阅读全文
摘要:我对C++的一些疑问,最近使用C++,总感觉有些东西自己没有抓住,也可能是自己基础学的不是很扎实,所以对一些基本的东西理解不够透彻导致的。因为自己在学校也学过C#和java,C#它是一个完全的面向对象的语言,所以没有这么麻烦,在C#中除了基本的几种值类型,其他的一切都是对象,都是Object的子类。我的疑问如下:1、在C#中对象声明并不开辟存储空间,直到调用类的构造函数显示的初始化对象,之后才会开辟空间,而在C++中,对象声明之后就会自动调用默认构造函数,这样,是不是已经开辟了存储空间了呢?自己的回答:C++中调用构造函数有几种方式,如 Point p;此时,会自动调用类Point的默认构造函
阅读全文
摘要:写在前面的话:C++中对文件的操作跟C语言是有很大差别的,因此总结一下C++对文件的操作。1、通常用法在C++中队文件的输入输出流和对内存的输入输出流以及对字符串的输入输出流接口是一致的,如果输入流能产生字节,可以用一个提取操作符从这个流中获取信息。这个提取符产生并格式化目的对象所期望的信息类型。虽然输入流用起来很方便,但是也有一个问题,在使用格式化的输入机制,尤其是标准输入时,会遇到和C语言中scanf()中同样的问题。如果输入一个非期望值,进程则被偏离,而且它很难恢复。另外,格式化的输入缺省以空格为分隔符。那么如下面的代码:#include using namespace std;int
阅读全文
摘要:写在前面的话:自己看书的时候不是太习惯边看边做上面的例子,因为感觉那样子看书太慢了,但是这样子又会因为看的太快,之后什么都记不住,所以就想写写读书笔记第六章
阅读全文
摘要:1、首先定义个文件指针变量FILE *fp;2、接着,使用fopen函数打开一个文件,一种指定的打开模式fp=fopen(fileName, openMode);当然,在使用完文件后一定要关闭文件,fclose();其中,文件名可以是相对地址,或者绝对地址,但是需要注意的是,地址中的分隔符反斜杠,需要两个而不是一个。文件的打开模式有以下几种:使用文件方式文件使用方式含义"r"(只读)为输入打开一个已存在的文本文件"w"(只写)为输出打开一个文本文件"a"向文本文件尾添加数据"rb"为输入打开一个二进制文件"
阅读全文
摘要:C++连接mysql数据库,并取数据进行显示本例中,在mysql中已经存在了一个数据库test,并在test数据库中创建了一张表stu做测试,表中包含3个字段需要把mysql目录下的libmysql.lib拷贝到当前目录代码如下: 1 /* 2 ** C语言连接mysql 3 */ 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 #pragma comment(lib, "libmysql.lib") 11 // 定义全局变量 12 MYSQL mysql; 13 14...
阅读全文
摘要:摘要:运算符能给程序员提供一种书写数学公式的感觉,本质上运算符也是一种函数,因此有类内部运算符和全局运算符之分,通过重载,运算符的“动作”更加有针对性,编写代码更像写英文文章。1、C++标准允许将运算符重载为类成员或者全局的,一般如果是全局的话,为了效率,都是把它们定义为类友元函数。 1 /* 2 ** 重载全局运算符“+”、“-”,代码如下: 3 */ 4 #include 5 6 using namespace std; 7 8 //class Complex; 9 //Complex operator+(const Complex &c1, const Complex &
阅读全文
摘要:摘要:累继承可以实现源代码重用,模板技术也可以达到同样的目的。模板可以分为函数模板和类模板,其共同点是允许参数类进行类型化,编译器根据程序员传递的具体类型,又把函数模板实例化为具体函数,把类模板实例化为模板类。 1、函数模板 (1)、来自同一个模板的模板函数只能执行相同的操作而不能执行不同的操作。这与重载不同,重载的函数一般不执行相同的操作(否则是去重载的意义)。 (2)、函数模板可以包含类型化参...
阅读全文
摘要:摘要:多态性提供一组统一的调用接口函数,依据这些条用接口函数具体对象的不同,同一名字的函数会有不同的行为。1、重载与隐藏(1)、对同一作用域中的同名函数,如果它们的函数特征标不同,那么它们就形成一种重载关系。(2)、基类与派生类中非虚同名函数,不管它们的参数特征标是否相同,它们都形成隐藏关系,即派生类对象隐藏基类中的同名函数。 1 #include 2 3 using namespace std; 4 5 class Animal 6 { 7 public: 8 void walk() 9 {10 cout sleep();48 49 pAnima...
阅读全文
摘要:1、C++中三种继承方式及派生类中访问控制规则(1)、C++支持的三种继承方式是public、protected、private。C++允许一个类同时以不同的方式对不同的基类加以继承。(2)、不同继承方式下基类成员在派生类中的访问控制继承方式基类成员访问控制publicprotectedprivatepublicpublicprotectedno accessprotectedprotectedprotectedno accessprivateprivateprivateno access注意:在派生类中,表中所述的访问控制“private”和“no access”存在很大的差别。对来自基类且
阅读全文
摘要:1、函数重载而不出错是有条件的:(1)、这些函数位于同一域内,如同一类中、同一文件中。(2)、这些同名函数具有不同的参数特征标(特征标是指形參的个数、类型、排列顺序等)。2、引用特性(与指针对比):(1)、引用在创建时必须初始化,这与指针变量的声明不同。(2)、引用一旦初始化为指向一个对象,它就不能改变对另一个对象的引用。指针在任何时候都可以改变为指向另一个对象。(3)、引用必须与合法内存单元相关连,不存在NULL引用;指针可以赋值为NULL。(4)、从C++语言层面,引用和变量、对象一样。从二进制层面,引用一般使用指针来实现,引用的本质是指针,但是编译器完成了这些隐式转换。3、有了mallo
阅读全文
摘要:1 变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且只有一个定义。声明用于向程序表明变量的名字和类型。定义也是声明:当定义变量时,我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名,对象类型和对象类型前的关键字extern。extern int i; // declears but does not define iint i; // declars and defines iextern 声明不是定义,也不分配存储空间。事实上,他只是说明变量定义在程序的其他地方。程序中变量可以声明多次,定义只能一次。只有当
阅读全文
摘要:呵呵,当初我学多线程时也遇到过这样的问题,也是输出的结果每次都不一样。后来我找到原因了---都是多核惹得祸。 我猜你的电脑应该也是多核的。单核的cpu在处理多线程时每次只能执行一跳指令,也就是说无论你的程序有多少个线程,每一时刻执行的也只是一个线程里的代码,cpu会轮流给每个线程分配时间片,时间片分配到哪个线程头上,哪个线程里的代码就执行。但是多核cpu就不一样了,他可以同时执行多个线程里的代码,这才是真正的“多线程”。所以你那段程序,在单核的电脑上跑应该是没有问题的,但是在多核cpu的电脑上出现的结果就会有很大的随机性。 就你贴的那张图来说,左边的运行时恰好是这样的,首先cpu1执行你主线程
阅读全文
摘要:Effective C++ 55 Specific Ways to Improve Your Programs and design1、让自己习惯C++。 Accustoming yourself to C++条款01:视C++为一个语言联邦。 View C++ as a federation of languages.条款02:尽量以const enum inline 替换 #define。 Prefer const,enum and inline to #define.条款03:尽可能使用const。 Use const whenever possible.条款04:确定对象被使用之前已被
阅读全文
摘要:通常,源文件中所有内容都要参加编译,但是在某些时候,可能希望源文件中某些部分在满足某些条件的情况下才进行编译,这就是所谓的“条件编译”。条件编译非常有用,许多学习C++的人在最开始的时候往往会忽略它,因为没有它我们的程序照样运行的很好。要注意,对于一些小型的程序,可能条件编译的作用常常被掩盖,但是当程序的规模变大后条件编译的作用和优势就会显现出来了。因此把握它还是非常重要的。条件编译有以下三种形式:1:#ifdef 标识符 程序片段1#else 程序片段2#endif上述语句的意思就是如果标识符已被#define命令定义过,则对程序片段1进行编译;否则对程序片段2进行编译。其中,程序片段2可以
阅读全文
浙公网安备 33010602011771号