随笔分类 -  CPP-基础

摘要:1,成员访问属性一,对于类的实现来说:private:类内部(包括类域范围内)可访问。protect:类内部(包括类域范围内)或 派生类类内部(包括类域范围内)可访问。public: 类内部和外部均可访问。二,对于类的对象来说:单个类的对象:对象只可访问公有属性的成员。2.类继承属性 阅读全文
posted @ 2014-06-19 16:14 CPYER 阅读(251) 评论(0) 推荐(0)
摘要:C_C++变量命名规则变量命名规则是为了增强代码的可读性和容易维护性。以下为C++必须遵守的变量命名规则:1、变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。2、第一个字母必须是字母或者下划线开头。3、不能使用C++关键字来命名变量,以免冲突。4、变量名区分大小写。变量命名规... 阅读全文
posted @ 2014-05-15 09:32 CPYER 阅读(1344) 评论(0) 推荐(0)
摘要:在新的标准 C++ iostream 库中:1. open 函数不采用第三个参数(保护参数)。2. 无法从文件句柄创建流。3. 除了几个例外,新的标准 C++ 库中的所有名称都在 std 命名空间中。有关更多信息,请参见使用 C++ 库头。4. 单独用 ios::out 标志无法打开 ofstream 对象。ios::out 标志必须在逻辑 OR 中和另一个 ios 枚举数组合;比如,和 ios::in 或 ios::app 组合。5. 因为设置了 eofbit 状态,到达文件尾后 ios::good 不再返回非零值。 除非知道当前没有设置基标志,否则 ios::setf(_IFlags)不应 阅读全文
posted @ 2013-12-17 17:29 CPYER 阅读(371) 评论(0) 推荐(0)
摘要:配置文件格式是[JP]K=2EC156673E 2F4240 5595F6char str[50];GetPrivateProfileString("JP", "K",NULL, str, sizeof(str),".\\keydog.ini");得到str后想将其分成三个字符串str1=2EC156673Estr2=2F4240str3=5595F6第一种方法用MFC 得有这句#include 和包含mfc库 CString sz; GetPrivateProfileString("JP", "K&qu 阅读全文
posted @ 2013-12-10 09:55 CPYER 阅读(774) 评论(0) 推荐(0)
摘要:在C语言中,假设咱们有这样的一个函数:intfunction(inta,intb)调历时只有用result=function(1,2)的方法就能利用这个函数。然而,当高档语言被编译成计算机可以识别的另外的代码时,有一个题目就凸显了:在CPU中,计算机没有办法知道一个函数调用几个、什么类型的参数,也没有硬件可以保留这些参数。也就是说,计算机不懂怎么给这个函数传递参数,传递参数的事情必需由函数调用者和函数自己来做。为此,计算机供给了一种被称为栈的数据结构来管理参数传递。 栈是一种先辈后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为栈顶)。用户可以在栈... 阅读全文
posted @ 2013-11-05 10:52 CPYER 阅读(256) 评论(0) 推荐(0)
摘要:虚函数表 对C++了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。 这里我们着重看一下这张虚函数表。C++的编译器应该是保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证取到虚函数表的有最高的性能——如果有多.. 阅读全文
posted @ 2013-10-31 15:45 CPYER 阅读(969) 评论(0) 推荐(0)
摘要:一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点:1.静态数据成员的定义。静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。其定义方式与全局变量相同。举例如下:xxx.h文件class base{ private: static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。 }; xxx.cpp文件const int b. 阅读全文
posted @ 2013-10-23 17:29 CPYER 阅读(664) 评论(0) 推荐(0)
摘要:2005-08-23 08:36 来源:天极网 作者:宋宝华 责任编辑:方舟·yesky引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解。 想必这种误解的根源在于国内某著名的C程序设计教程。如果这篇文章能够纠正许多中国程序员对数组名 阅读全文
posted @ 2013-10-23 09:43 CPYER 阅读(369) 评论(0) 推荐(0)
摘要:1. new int[] 是创建一个int型数组,数组大小是在[]中指定,例如: int * p = new int[10]; //p执行一个长度为10的int数组。2. new int()是创建一个int型数,并且用()括号中的数据进行初始化,例如: int *p = new int(10); // p指向一个值为10的int数。int a = 10,也叫静态创建,申明的变量的内存在栈里面;int *p=new int(10)是在“堆”上指定了一个int变量,并把该变量的地址赋给了int *型指针p;该变量没有名称,只能通过*p访问;当程序退出定义该变量的板块后,该变量仍然存... 阅读全文
posted @ 2013-10-22 10:48 CPYER 阅读(1069) 评论(0) 推荐(0)
摘要:目 录1简介2例如3将char转换成wchar_t1.简介 wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式,wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以wchar_t类型存储。char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同的规定,如GNU Libc规定wchar_t为32位[1],总之,wchar_t所能表示的字符数远超char型。标准C++中的wprintf()函数以及io. 阅读全文
posted @ 2013-10-16 13:12 CPYER 阅读(455) 评论(0) 推荐(0)
摘要:目 录1定义2使用原理1.定义TCHAR是通过define定义的字符串宏[1]2.使用原理 因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串 微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数为了存储这样的通用字符,就有了TCHAR:当没有定义_UNICOD 阅读全文
posted @ 2013-10-16 13:09 CPYER 阅读(302) 评论(0) 推荐(0)
摘要:把文件分成头文件和源文件完全是为了方便扩展和组织程序 这么说吧 我们可能会自定义很多函数 而这些函数分别会在不同的地方被调用 甚至有些时候我们需要把一堆函数打包起来一起调用 比如#include "stdio.h" 的意思就是告诉系统 我要用输入输出函数包(stdio.h打包了各种各样的输入输出函数). 说说具体的吧 为了方便函数可以独立的被任何地方调用 我们会把每一个函数的定义代码都写成一个cpp 这个叫做函数的代码文件 并且此cpp的文件名以此函数名来命名 同时 我们会建立一个文件名相同的头文件(即.h)并在该头文件里写上此函数的函数声明(如 void a();等等) 阅读全文
posted @ 2013-10-14 09:42 CPYER 阅读(766) 评论(0) 推荐(0)
摘要:[转]浅谈C/C++内存泄露及其检测工具 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考在C++中也加入GC的支持。现实世界就是这样的,作为一个c/c++程序员,内存泄漏是你心中永远的痛. 阅读全文
posted @ 2013-10-14 09:22 CPYER 阅读(823) 评论(0) 推荐(0)
摘要:编写一个List类:class List{ int length; //列表长度 int* lpInt; //列表指针 List(int size); ~List();}List::List(int size){ length = size; lpInt = new int(length); //关键点 int n; for(n=0;n<length;n++) { lpInt[n] = n; }}List::~List(){delete []lpInt; //出错,访问越界}在调试时,运行报错:Debug Error!Frogram: C:\Test\... 阅读全文
posted @ 2013-10-09 16:26 CPYER 阅读(1878) 评论(0) 推荐(0)
摘要:快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。算法过程:设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是: 1)设置两个变量I、J,排序开始的时候:I=1,J=N-1; 2)以第一个数组元素作为关键数据,赋值给X,.. 阅读全文
posted @ 2013-09-25 17:29 CPYER 阅读(1374) 评论(0) 推荐(0)
摘要:a.C++的类的成员函数中,允许直接访问该类的对象的私有成员变量。b.在类的成员函数中可以访问同类型实例的私有变量。c.拷贝构造函数里,可以直接访问另外一个同类对象(引用)的私有成员。d.类的成员函数可以直接访问作为其参数的同类型对象的私有成员。举例描述上述知识:1).在拷贝构造函数中可以访问引用对象的私有变量:例如:classPoint{public: Point(intxx=0,intyy=0){X=xx;Y=yy;} Point(Point&p);private: intX,Y;};Point::Point(Point&p) //如果是类里的普通函数呢?{ X=p.X; 阅读全文
posted @ 2013-09-24 17:43 CPYER 阅读(1431) 评论(0) 推荐(0)
摘要:// template.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include #include #include #include #include // std::time#include // std::rand, std::srandusing namespace std;//类模板/////////////////////////////////////////////////templateclass myClass{ private: T1 I; T2 J; public: myClass(T1 a, T2 b)... 阅读全文
posted @ 2013-09-13 17:29 CPYER 阅读(497) 评论(0) 推荐(0)
摘要:背景:在C&C++中一、inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。表达式形式的宏定义一例:#define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢:1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器 阅读全文
posted @ 2013-09-13 10:50 CPYER 阅读(489) 评论(0) 推荐(0)
摘要:内存不可写 char*先看一个例子///////////////代码1#include main(){ char *buf = "good morning."; char *p; p = strchr(buf, 'd'); *p = 'h'; // 此处不可以进行赋值.提示出错,内存不可写 printf("%s", p); return 0;}///////////////////////////////代码2#include int main(void){ char buf[] = "good morning. 阅读全文
posted @ 2013-09-09 13:42 CPYER 阅读(923) 评论(0) 推荐(0)
摘要:非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用。例如:class A{private: int m_a;public: A() : m_a(0) {} int getA() const { return m_a; //同return this. 阅读全文
posted @ 2013-09-04 16:34 CPYER 阅读(373) 评论(0) 推荐(0)