摘要:
初始化对象 Cat(): itsAge(5),itsWeight(8){ }在初始化阶段初始化数据成员通常更清晰,效率更高。有些数据成员必须初始化,不能在构造函数体内赋值。包括引用和常数。只要有可能就应该使用初始化的语法。复制构造函数(Copy Constructor)复制构造函数的参数只有一个,即同一类的对象引用。通常应该是常数引用,因为构造函数不改变传递进来的对象。 CAT (const ... 阅读全文
2005年4月26日
摘要:
大多数情况下,使用引用传递参数可以达到指针的相同效果(减少传值方式下复制参数带来的开销)。但:如果程序需要先指向一个对象,然后再改为指向另一个对象,则只能用指针;引用不能是空,因此如果被讨论对象有可能为空,则必须使用指针。例子: // 在给内存赋值前确定是否发生错误int* pInt = new int;if (pInt != NULL) int& rInt = *pInt;注意:不要返回... 阅读全文
摘要:
丢失或不稳定指针 当程序对指针进行 delete 操作,从而释放他的内存。然后没有重新赋值就试图使用该指针时,就形成丢失指针。进行 delete 操作后,指针仍然指向旧的内存区,但编译器可以在那里存放任何其他数据。最坏的时候使用该指针可能导致程序崩溃。为安全起见,在删除指针后设置它为 null(0).const 指针 const 可以在指针类型前,后,或者前后都用。例如: // 指向常数的指针,... 阅读全文
摘要:
访问数据成员 本来的语法应该是:(*pRags).GetAge(); 因为这样比较麻烦,所以有简略的语法:pRags->GetAge();自由存储区中的成员数据类可能有一个或多个数据成员是自由存储区中的对象指针。内存可有类构造函数或某个方法来分配,由析构函数来释放。例子: #include using namespace std;class SimpleCat{public: Simple... 阅读全文
摘要:
自由存储区:也称为堆(heap),可以看作大量的内存段。通过 new 操作符分配的内存在堆中。程序结束之前不自动清除自由存储区。需要由程序来负责释放(delete)。 栈:函数调用的时候,在栈中保存局部变量和函数参数等。当函数返回时,自动清除栈。new 关键词:new 进行自由存储区中内存分配。 unsigned short int* pPointer = new unsigned short ... 阅读全文
摘要:
引用是别名。定义的语法:int& rSomeRef = someInt;用指针和引用分别实现交换变量的函数: #include using namespace std;void swap(int* x, int* y);int main(int argc, char *argv[]){ int x = 5, y = 10; cout using namespace std;void ... 阅读全文
2005年4月22日
摘要:
Array 的元素可以是任何类型,各个元素的类型也可以互不相同。甚至可以是数组类型,这样就可以创建数组的数组。9.1.1 数组的创建方法: // 创建一个没有元素的数组var a = new Array();// 创建一个数组的同时允许指定开始的 n 个元素var a = new Array(5, 4, 3, 2, 1, "testing, testing");// 仅仅指定数组的长度,这个例子... 阅读全文
摘要:
注:这里只讲解一些 Array() 的最重要的方法。其他更多的参考手册。9.2.1 join() 将所有元素转换为字符串并默认用 "," 连接。可以指定一个附加的参数来自定义分隔符: var a = [1, 2, 3];var s = a.join(); // s == "1,2,3"s = a.join(", "); // s == "1, 2, 3" 该方法是 String.split() ... 阅读全文
摘要:
8.7.1 constructor 属性如: var o = new Complex(1, 2);o.constructor == Complex; // 估算为 true上一节提到的 Complex 类(或其他任何类)的实例并不每人拥有一个唯一的 constructor 属性;相反的,该属性其实是从他的 prototype 对象继承来的。上一节提到,JavaScript 为每一个 const... 阅读全文
摘要:
第八章讨论了对象。这一章我们来学习数组,这里的数组和前面提到的关联数组不同:这里的数组是以正整数为 key 的,而关联数组是字符串为 key.在大部分情况下,我们可以区分对待对象和数组,这使得编程更容易些。但要知道的是,本质上 Array 也是 Object. 只不过是实现了一些特殊功能的 Object 罢了。 阅读全文
摘要:
访问对象的属性可以用 "." 或 "[]" 语法。下面两个表达式效果是等效的:object.propertyobject["property"]这两种写法主要的区别是,前者的 property 是一个标志符(identifier),他们不是数据类型(data type). 而后者是字符串,是一种数据类型。所以后者可以在运行时刻来灵活的动态估算。比如: var addr = "";for (i ... 阅读全文
摘要:
虽然 JavaScript 支持我们所谓的对象(object),但他没有正式的“类”(class) 这个提法。这使得他和传统的面向对象语言比如 C++ 以及 Java 有些区别。面向对象的语言一个共有的概念就是强类型,支持基于类的继承。而 JavaScript 不具备。另一方面,JavaScript 大量使用对象,有基于原型的继承方法, JavaScript 又是一个真正的面向对象语言。(此处省去... 阅读全文
摘要:
前面我们看到了如何使用 constructor 来初始化对象。如果这样做,那么每一个创建的新对象都会对那些相同的属性,方法建立一个独立的副本。而实际上有更加有效的方法来指定方法,常量,以及其他一些可被所有该类的对象共享的属性。JavaScript 对象从一个原形对象(prototype object) 继承属性。所有对象都有原型;原型的所有属性看上去就像使用它作为原型的那些对象的属性一样。简单的说... 阅读全文
摘要:
method 就是通过对象而被调用的一种 JavaScript function. function 可以被赋值给对象的任何变量,或属性。比如:f 是一个 function. o.m = f;一旦定义了,我们可以这样来调用: o.m();o.m(x, x + 2); // 如果需要参数方法有一个非常重要的特性:用来调用方法的那个对象,在方法体内可以以 this 指针被引用。function... 阅读全文
摘要:
constructor 是具有下列两个特征的一种 JavaScript 函数:1. 通过 new 被调用。2. 被隐式传递了一个引用, 叫做 this. 这个引用指向一个新创建的空的对象。构造函数要负责对该对象进行必要的初始化。例子: // Define the constructor.// Note how it initializes the object referred to by "t... 阅读全文