
C/C++
文章平均质量分 81
luxiaoxun
拒绝平庸,但也不指望什么奇迹!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字符串库函数strcpy strcmp strstr memcpy memmove等的实现
//字符串长度int strlen(const char *str) { assert(str != NULL); int len = 0; while (*str ++ != '\0') ++ len; return len; }//字符串拷贝char *strcpy(char *to, const原创 2012-05-21 16:24:58 · 1655 阅读 · 0 评论 -
C++的重载(overload)与重写(override)
成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。重写是指派生类函数重写基类函数,是C++的多态的表现,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual关键字。示例中,函数Base::f(int)与Base::原创 2012-08-09 18:27:13 · 1713 阅读 · 0 评论 -
C++构造函数虚拟化
虚拟构造函数当你有一个指针或引用,但是不知道其指向对象的真实类型是什么时,你可以调用虚拟函数来完成特定类型(type-specific)对象的行为。仅当你还没拥有一个对象但是你确切地知道想要对象的类型时,你才会调用构造函数。那么虚拟构造函数又从何谈起呢?例如假设你编写一个程序,用来进行新闻报道的工作,一条新闻报道由文字或图片组成。你可以这样管理它们:class NLComponent原创 2012-08-12 19:31:25 · 2661 阅读 · 2 评论 -
类的operator new与operator delete的重载
为什么有必要写自己的operator new和operator delete?答案通常是:为了效率。缺省版本的operator new是一种通用型的内存分配器,它必须可以分配任意大小的内存块。同样,operator delete也要可以释放任意大小的内存块。operator delete想弄清它要释放的内存有多大,就必须知道当初operator new分配的内存有多大。有一种常用的方法可以原创 2012-08-11 10:45:32 · 1187 阅读 · 0 评论 -
构造函数和析构函数的一些问题
1、构造函数和析构函数为什么没有返回值?构造函数和析构函数是两个非常特殊的函数:它们没有返回值.这与返回值为void的函数显然不同.后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许.在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行.如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己原创 2012-06-20 11:37:02 · 2008 阅读 · 0 评论 -
C++类的大小
一个空类class A{};的大小为什么是1,因为如果不是1,当定义这个类的对象数组时候A objects[5]; objects[0]和objects[1]就在同一个地址处,就无法区分。#includeusing namespace std;class A{public: virtual void aa(){}private: char k[3];原创 2012-09-01 10:45:41 · 1192 阅读 · 0 评论 -
《编程珠玑》中的一些代码
位图排序使用位图对[0..N-1]中不同的整数进行排序/* bitmap sort -- Sort distinct integers in the range [0..N-1] */#include #define BITSPERWORD 32#define SHIFT 5#define MASK 0x1F#define N 10000000int a原创 2012-07-16 18:25:06 · 1312 阅读 · 0 评论 -
new、operator new和placement new
C++中的new/delete与operator new/operator deletenew operator/delete operator就是new和delete操作符,而operator new/operator delete是函数new operator(1)调用operator new分配足够的空间,并调用相关对象的构造函数(2)不可以被重载operator new原创 2012-08-04 19:17:08 · 1295 阅读 · 0 评论 -
C语言里的位域
C语言里的位域是一个比较复杂的问题,涉及的方面也比较多,关于位域的基础内容可以参考以下:分析代码如下:#includestruct BitSeg1{ int a:4; int b:3;};struct BitSeg2{ char a:4; char b:3;};int main(){ struct BitSe原创 2012-05-25 14:20:05 · 1397 阅读 · 0 评论 -
设计一个只能在堆上或栈上实例化的类
设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类://只能在堆内存上实例化的类class CHeapOnly{public: CHeapOnly() { cout << "Constructor() of CHeapOnly!" << endl; } void Destroy() const { de原创 2012-04-02 21:17:45 · 1250 阅读 · 0 评论 -
大端和小端(Big endian and Little endian)
一、大端和小端的问题对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节)。 例如,假设从内存地址 0x0000 开始有以下数据: 0x0000 0x0001原创 2012-06-02 16:33:46 · 2445 阅读 · 0 评论 -
C++中的临时对象都是const类型
struct A {};struct B{ public: B(){} B(A& a){}};struct B1 : public B{ public: B1(const B& b) : B(b) {}}; int main(){ A a; B1 b1(a); return 0;}上面的代码可以原创 2012-04-04 16:00:47 · 979 阅读 · 0 评论 -
C++学习小结
一、构造和析构函数C++在幕后为你写的的函数:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说,如果你这么写:class Empty{};和你这么写是一样的:class Empty {public: Empty();原创 2012-06-03 15:57:37 · 2333 阅读 · 2 评论 -
C++ I/O流操作
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器( 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,c原创 2012-03-31 20:21:55 · 3530 阅读 · 0 评论 -
C++数字与字符串之间的转换
1、字符串数字之间的转换(1)string --> char * string str("OK"); char * p = str.c_str();(2)char * -->string char *p = "OK"; string str(p);(3)char * -->CString char *p ="OK"; CSt原创 2012-06-29 18:28:11 · 3655 阅读 · 0 评论 -
C++ STL学习笔记
#.string 建议 使用string 的方便性就不用再说了,这里要重点强调的是string的安全性。 string并不是万能的,如果你在一个大工程中需要频繁处理字符串,而且有可能是多线程,那么你一定要慎重(当然,在多线程下你使用任何STL容器都要慎重)。 string的实现和效率并不一定是你想象的那样,如果你对大量的字符串操作,而且特别关心其效率,那么你有两个选择,首原创 2012-11-18 18:12:27 · 3233 阅读 · 0 评论