c/c++
文章平均质量分 61
banzhiyu
这个作者很懒,什么都没留下…
展开
-
拨开自定义operator new与operator delete的迷雾
拨开自定义operator new与operator delete的迷雾 C++允许用户通过自定义operator new和operator delete的方式来更改new与delete表达式的某些行为,这给了程序员定制内存管理方案的自由。但是享受这种自由的时候必须遵守一定的规范,具体可以参见《Effective C++ 2nd》的相关条款。本文补充解释一些特别容易引起误解的转载 2007-04-09 13:22:00 · 512 阅读 · 0 评论 -
字符串反向输出以及缓冲区分析
用一般方法实现:#include#include using namespace std;string reverseString(string s);void main(){string str;coutcin>>str;coutcout} //还未清空,输出会连在一起!!原创 2007-05-14 22:28:00 · 714 阅读 · 0 评论 -
字符串长度问题!(用new建立)
问题:str未被赋值时,它的长度为什么会是11呢,明明new的是一个7的数组阿?赋值后,长度又变正确了!int main(){char *str;int length,n;str = new char[7]; //分配了七个字节,但并没有赋值,也就是说,这里面是什么都 length=strlen(str); //有可能,当然也有可能是/0,但是strlen是遇到原创 2007-05-14 22:30:00 · 592 阅读 · 0 评论 -
getch(),getche(),getchar()的区别
getch(),getche(),getchar()的区别 这个问题,谭浩强的C语言设计第二版没有讲清楚,或者没有讲。查了查其它的资料,总算搞清楚了。 getch()、getche()和getchar()函数 (1) getch()和getche()函数 这两个函数都是从键盘上读入一个字符。其调用格式为: getch(); getche(); 两者的原创 2007-05-28 00:45:00 · 826 阅读 · 1 评论 -
地址、指针与动态内存分配
(1) 地址 01.cpp: C/C++程序运行时,各种数据类型(常量,变量,函数,数组,结构,对象等)在内存中都有地址,知道地址即可取得它们的内容,可用“取地址操作符”&得到地址例01.cpp:取得常量、变量、数组、函数的(首)地址 (2)指针 1 指针是存放另一变量地址的变量;在C/C++中,说明它的一般形式为: " 数据类型 *指针名"2 指针说明时的数据转载 2007-05-27 21:53:00 · 2273 阅读 · 0 评论 -
明晰C++内存分配的五种方法的区别
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。转载 2007-05-29 15:25:00 · 542 阅读 · 0 评论 -
实现键盘输入口令,口令用*号掩盖
#include #include #include #define BACKSPACE 8char *get_password(const char *prompt) { static char buffer[128]; int i = 0; char letter = NULL; printf(prompt); while ((i letter = g原创 2007-06-01 17:54:00 · 735 阅读 · 0 评论 -
Liskov替换原则(LSP)
Barbara Liskov说: 这里需要如下替换性质-----若对每个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,用o1替换o2后,程序P的行为功能不变,则S是T的子类型.上面的就是Liskov替换原则,换句话说,就是子类型(sub type)必须能够替换掉它们的基类型(base type).对于LSP的违反也潜在的违反了OCP.如果新派生类的创建会导致转载 2007-09-03 20:42:00 · 649 阅读 · 0 评论 -
c++中的explicit关键字
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:MyClass( int num );}....MyClass原创 2007-06-10 17:15:00 · 643 阅读 · 0 评论 -
对C++中引用的补充说明(实例)
#include iostream> #include string> using namespace std; void main(int argc,char* argv[]){ int a=10; int b=20; int &rn=a; cout cout//c++中是无法取得应用的内存地址的,取引用的地址就是取目标的地址!转载 2007-06-10 23:05:00 · 567 阅读 · 0 评论 -
const总结
首先说明一下使用const的好处: 使用const的好处在于它允许指定一种语意上的约束------某种对象不能被修改--------编译器具体来实施这种约束。通过const,你可以通知编译器和其他程序员某个值要保持不变。只要是这种情况,你就要明确地使用const ,因为这样做就可以借助编译器的帮助确保这种约束不被破坏。 (一) 首先解释一下const与指针的关系: const在指针的声明中有一下三转载 2007-06-12 21:44:00 · 539 阅读 · 0 评论 -
typedef使用大全1
typedef到处都是,但是能够真正懂得typedef使用的不算太多。对于初学者而言,看别人的源码时对到处充斥的typedef往往不知所错,而参考书又很少,所以在此给出一个源码,供大家参考 #include #include /* 避免Visual C的for与标准for的不同 */#definefor if (0); elsefor /* dim(a)转载 2007-11-01 00:26:00 · 607 阅读 · 0 评论 -
typedef使用大全2
#define S(s) printf("%s/n", #s); s typedef struct _TS1{ int x, y;} TS1, *PTS1, ***PPPTS1; // TS1是结构体的名称,PTS1是结构体指针的名称// 也就是将结构体struct _TS1 命名为TS1, // 将struct _TS1 * 命名为 PTS1// 将struc原创 2007-11-01 00:28:00 · 553 阅读 · 0 评论 -
多重继承的对象模型
废话少说,在C++中是允许多重继承的,比如有一个派生类CImp派生自CBaseA,和CBaseB。在CImp中覆盖了两个基类中的虚函数。如果一个函数要求基类的指针,而我们传递一个派生类对象的地址,编译器如何保证这是安全的。 在C++中,类是编译期的,为了实现多重继承,在派生类的内存布局中保留了基类的完整信息块,这样当发生派生类到基类的转换的时候,只需要改变指针位置就可以了。如下代码原创 2007-11-04 00:07:00 · 796 阅读 · 0 评论 -
swap_ranges算法(STL)
算法目的交换两个相等大小的容器内容.templatetypename ForwardIterator1, typename ForwardIterator2>ForwardIterator2 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1,原创 2007-05-14 22:25:00 · 565 阅读 · 0 评论 -
memset用法
memest原型 (please type "man memset" in your shell) void *memset(void *s, int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。常见的三种错误第一: 搞反了c 和 n的位置. 一定要记住 如果要把一个char a原创 2007-05-14 22:32:00 · 1044 阅读 · 0 评论 -
string类型转化为数字类型
方法1: #include "stdafx.h" #include #include using namespace std; int main(int argc, char* argv[]) { string str="33"; int i=atoi(str.c_str());原创 2007-04-09 17:49:00 · 1037 阅读 · 0 评论 -
this指针
获取this指针的地址是可以的;) 而且在类X的非const成员函数里,this的类型应该是X* const,所以可以修改this说指向的地址的值的内容,而不能修改自身; 在类X的const成员函数里,则是const X * const所以两边都不能修改原创 2007-04-15 01:20:00 · 536 阅读 · 0 评论 -
如何用new来动态申请二维空间。
有以下几种方法: 1、 char (*p)[4] = new char[100][4]; p[1][2] = a; ... delete [] p; 2、 char **p = new char*[100]; for(i=0;i p[i] = new char[4];转载 2007-04-15 01:26:00 · 994 阅读 · 0 评论 -
用I/O流建立一个text.txt并写入字符。
#include#includeusing namespace std;int main(){ ofstream ok; ok.open("test1.txt",ios::out); ok ok.close(); return 0;}拷贝zhy.txt文件到新的文件,应该如何写?#include#includeusing namespace std;void原创 2007-04-14 23:36:00 · 2902 阅读 · 0 评论 -
C/C++头文件一览
C、传统 C++#include //设定插入点#include //字符处理#include //定义错误码#include //浮点数处理#include //文件输入/输出#include //参数化输入/输出#include //数据流输入/输出#include //定义各种数据类型最值常量#include //定原创 2007-04-17 08:49:00 · 617 阅读 · 0 评论 -
在C++中运行.exe程序
头文件:#include具体函数:ShellExecute(handle,"open", "路径", NULL, NULL, SW_SHOW );原创 2007-07-26 08:51:00 · 684 阅读 · 0 评论 -
一次读取文件中所有内容
#include #include #include #include #include using namespace std;int main(){string str;ifstream ifile("test.txt");ostringstream tmp;tmpstr = tmp.str();coutsystem("pause");return 0;}原创 2007-07-26 09:35:00 · 1444 阅读 · 0 评论 -
Boost初识
一直觉得STL与Boost都是很神秘并且高深的,前些天学习了下STL,有了初步的了解,发现真是个好东西,给我们编程真是带来了很大的方便。而且十分的高效,真是让我不舍得不用啊,呵呵。昨天在网上看了篇关于BOOST的一篇入门文章,收获不小,特此记录下来。Boost是什么?一套开放源代码、高度可移植的C++库。它都包括些什么内容呢?正则表达式,可以与POSIX API和Perl语言处理正原创 2007-04-30 15:40:00 · 619 阅读 · 0 评论 -
选择合适的排序函数()
为什么要选择合适的排序函数?可能你并不关心效率(这里的效率指的是程序运行时间), 或者说你的数据量很小, 因此你觉得随便用哪个函数都无关紧要。其实不然,即使你不关心效率,如果你选择合适的排序函数,你会让你的代码更容易让人明白,你会让你的代码更有扩充性,逐渐养成一个良好的习惯,很重要吧 。 如果你以前有用过C语言中的qsort, 想知道qsort和他们的比较,那我告诉你,qsort和sor原创 2007-04-28 23:05:00 · 1026 阅读 · 0 评论 -
重载、覆盖与隐藏简单剖析
成员函数被重载的特征:1.在同一个类中2.函数名字相同.3.参数不同.4.virtual关键字可有可无.覆盖的特征:1.分别位于基类与派生类中.2.函数名字相同.3.参数相同.4.基类函数必须有virtual关键字例如:#include class Base{public:void f(int x){coutvoid f(float x)原创 2007-05-15 20:17:00 · 644 阅读 · 0 评论 -
有关函数指针数组
今天看书发现这个比较陌生的概念,于是上网查了查,大概有所了解了。通过下面的例子比较容易理解。#include using namespace std; typedef void (*MyFunDef)(const char*); void hello(const char *s) { c原创 2007-05-15 22:52:00 · 694 阅读 · 0 评论 -
typedef 用法小结
来源一:Using typedef to Curb Miscreant Code Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。 typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写转载 2007-05-14 22:26:00 · 479 阅读 · 0 评论 -
关于缓冲区溢出
缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。 缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问题随着动态分配变量而出现。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存。如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了,漏到了别的地方。一个缓冲区溢出应用程序使用这个溢原创 2007-05-14 22:29:00 · 723 阅读 · 0 评论 -
extern用法
extern用法 extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字.它告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 1。对于extern变量来说,仅仅是一个变量的声明,其并不是在定义分配原创 2008-04-10 10:14:00 · 578 阅读 · 0 评论