- 博客(13)
- 收藏
- 关注
原创 《C专家编程》读书笔记(3)
***什么时候数组和指针是相同的*** (1)“表达式中的数组名”就是指针;对数组下标的引用总是可以写成“一个指向数组的起始地址的指针加上偏移量”。例如,假如我们声明:int a[10], *p, i = 2;就可以通过以下任何一种方法来访问a[i]://第一种方法p = a;p[i];//第二种方法p = a;*(p+i);//第三种方法p = a+i;*p;
2007-05-11 20:06:00 1020
原创 《C专家编程》读书笔记(2)
***数组和指针是如何访问的***标准规定赋值符必须用可修改的左值(为了与数组名区分,数组名也用于确定对象在内存中的位置,也是左值,但它不能作为赋值的对象)作为它左侧的操作数,而其右侧的操作数是地址的内容(右值)。数组和指针的差别:(1)数组只需将起始地址加上偏移地址,再解除引用既可取得数组中的各个元素;而指针需先将自身解除引用以获取所指向对象的地址,再解除引用才可取得所指向对象的内容;
2007-05-10 22:06:00 1242
原创 《C专家编程》读书笔记(1)
***C的发展历程***BCPL -> B -> New B -> 早期的C注释:BCPL(Basic Combined Programming Language) 基本组合编程语言B 在BCPL的基础上进行了简化,但由于硬件系统的内存限制,它只允许放置解释器,而不是编译器。它同时保持了BCPL语言无类型的特点,仅有的操作数就是机器的字。New B 能同时解决多种数据类型,采用了编译模式
2007-05-07 22:27:00 1489
原创 “Multithreaded Job Queue”源码阅读笔记
源码见:http://www.codeproject.com/threads/multi_threaded_job_queue.aspInterlockedIncrement、InterlockedDecrement用于对多个线程竞争的公共资源进行排他式的增减1。此例中的lastUserID是父类CJob中的static变量,对于CJob的所有对象有且只有一份,其用于对已分配的编号进行计数,故
2006-11-22 19:16:00 890
原创 《深度探索C++对象模型》读书笔记(7)
***Template的“具现”行为***template class中的任何member都只能通过template class的某个实体来存取或操作。Pointfloat>::Status s; // okPoint::Status s; // error如果我们定义一个指针,指向特定的实体,像这样:Pointfloat> *ptr = 0;由于这是一个指向c
2006-10-16 17:24:00 898
原创 《深度探索C++对象模型》读书笔记(6)
***对象的构造和解构***一般而言,我们会把object尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象产生操作和销毁操作。 ***全局对象***全局对象的静态初始化策略包括以下几个步骤:(1)为每一个需要静态初始化的对象产生一个_sti_...()函数,内含必要的constructor调用操作或inline expansions;(2)为每一个需要静态的内存释放操作的对
2006-10-16 12:12:00 672
原创 《深度探索C++对象模型》读书笔记(5)
***纯虚拟函数***在设计抽象基类时,需要注意以下几点:(1)不要将destructor声明为pure virtual function;如果将destructor声明为pure virtual function,则设计者一定得定义它。因为每一个derived class destructor会被编译器加以扩展,以静态调用得方式调用其“每一个virtual base class”以及“上一
2006-10-13 13:16:00 850
原创 《深度探索C++对象模型》读书笔记(4)
***非静态成员函数(Nonstatic Member Functions)***C++的设计准则之一就是:nonstatic member function至少必须和一般的nonmember function有相同的效率。也就是说,如果我们要在以下两个函数之间作选择:float magnitude3d(const Point3d *this) ...{ ... }float Poi
2006-10-12 16:12:00 931
原创 《深度探索C++对象模型》读书笔记(3)
***class大小的计算所引发的思考***在visual C++ 6.0中测试如下代码:#include "iostream"using namespace std;class X ...{};class Y : public virtual X ...{};class Z : public virtual X ...{};class A : public Y,public Z .
2006-10-11 22:11:00 1130
原创 《深度探索C++对象模型》读书笔记(2)
***Default Constructor的建构操作***default constructor仅在编译器需要它时,才会被合成出来。通常来说,由编译器合成出来的default constructor是没啥用的(trivial),但有以下几种例外:(1)带有“Default Constructor”的Member Class Object如果一个class没有任何constructor,但它内含一
2006-10-10 14:31:00 779
原创 《深度探索C++对象模型》读书笔记(1)
***C++对象模型***在C++中,有两种class data members:static和nonstatic,以及三种class member functions:static、nonstatic和virtual。已知下面这个class Point声明:class Point ...{public:Point(float xval);virtual ~Point();float x(
2006-10-09 22:37:00 1045
原创 C++中用户定义的转换
看到《深度探索C++对象模型》的第21页,在其谈到C struct在C++中的一个合理用途时,看到了C++中用户定义的转换的运用。因而回头将《C++ Primer》中关于用户定义的转换的一些细节温习了一下。(1) 用户定义的转换的必要性:我们希望能够在SmallInt对象和其他SmallInt对象或者内置算术类型的对象之间进行加减操作,我们要通过提供6个SmallInt操作
2006-10-09 15:16:00 1220
原创 C++中的类静态成员和静态成员函数
今天刚开始看《深度探索C++对象模型》,刚看到第一章,竟然发现自己对类静态成员和静态成员函数还不够了解。查看了《C++ Primer》后,有以下几点体会:(1) 为什么需要类静态成员?有时候某个类的多个对象需要访问一个全局对象,在这种情况下“提供一个全局对象”比“每个类都维持一个独立的数据成员”要更为有效。而类静态成员与全局变量相比,又有两点好处:(a)不存在与程序中其他全
2006-10-09 12:39:00 824
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人