摘要:// 函数指针的使用#include using namespace std;enum BOOL { FALSE, TRUE };class Dog {public: void Speak() const { cout > member; if (member == 0) { fQuit = TRUE; break;...
阅读全文
摘要:重定义与重载隐藏基类成员函数重载与隐藏重载虚函数成员支持多态性;隐藏函数成员破坏多态性。显式调用基类函数成员的方法: fido.Mammal::Move(10);虚函数是如何工作的vtable, vptr虚函数仅仅对引用和指针方式传递起作用。如果以值的方式传递对象作为参数,则因为会导致转型,子类被切割(slice) 为父类的片断, 会导致错误的调用。(调用到的还是父类的方法)虚析构函数如果类中有...
阅读全文
摘要:向基类构造函数传递变量: #include using namespace std;enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };class Mammal{public: // constructors Mammal(); Mammal(int age); ~Mammal(); /...
阅读全文
摘要:一个简单的单链表程序实现: #include using namespace std;class CAT{public: CAT() { itsAge = 1; } CAT(int age) { itsAge = age; } ~CAT() {} int GetAge() const { return itsAge; }private: int itsAge;};/...
阅读全文
摘要:字符串类 #include using namespace std;class String{public: // constructors String(); String(const char* const); String(const String&); ~String(); // overloaded operators char& operat...
阅读全文
摘要:char 数组 char Greeting[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0'};// 速记形式:char Greeting[] = "Hello World";例子:填充数组 #include using namespace std;int main(int argc, char *argv
阅读全文
摘要:指向数组的指针和指针数组考虑下面三个声明的含义: Cat FamilyOne[500];Cat* FamilyTow[500];Cat* FamilyThree = new Cat[500];指针和数组名下例演示在自由存储区中声明和使用数组 #include using namespace std;class CAT{public: CAT() { itsAge = 1; itsWeig...
阅读全文
摘要:重载前缀运算符:returnType operator op(parameter)重载后缀运算符:后缀运算符加一个整变量作为参数,程序忽略参数的值。重载运算符的例子: #include using namespace std;typedef unsigned short USHORT;class Counter{public: Counter(); Counter(USHORT va...
阅读全文
摘要:初始化对象 Cat(): itsAge(5),itsWeight(8){ }在初始化阶段初始化数据成员通常更清晰,效率更高。有些数据成员必须初始化,不能在构造函数体内赋值。包括引用和常数。只要有可能就应该使用初始化的语法。复制构造函数(Copy Constructor)复制构造函数的参数只有一个,即同一类的对象引用。通常应该是常数引用,因为构造函数不改变传递进来的对象。 CAT (const ...
阅读全文
摘要:大多数情况下,使用引用传递参数可以达到指针的相同效果(减少传值方式下复制参数带来的开销)。但:如果程序需要先指向一个对象,然后再改为指向另一个对象,则只能用指针;引用不能是空,因此如果被讨论对象有可能为空,则必须使用指针。例子: // 在给内存赋值前确定是否发生错误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 ...
阅读全文