A. 使用类:
1. 重载操作符的格式为:operator op(argument-list) 其中,op是将要重载的操作符,它必须是有效的c++操作符。比如operator[]() 函数重载[]数组索引操作符。
2. c++对用户定义的操作符重载的限制:a.重载后的操作符必须至少有一个操作数是用户定义的类型。 b.使用操作符时不能违反操作符原来的句法规则。 c.不能定义新的操作符。 d.不能重载的操作符:sizeof、.、::、?:、typeid、const_cast、dynamic_cast、reinterpret_cast、static_cast. 下面的操作符只能通过成员函数进行重载:=、()、[]、->
3. 不要返回指向局部变量或临时对象的引用!因为函数执行完毕后,局部变量和临时变量将消失,引用将指向不存在的数据。
B. 类和动态内存分配:
1. 静态类成员:无论创建了多少对象,程序都只创建一个静态类变量副本。也就是说,类的所有对象共享同一个静态成员。不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,并不分配内存。例外是,静态数据成员为整型或者枚举型const。
2. StringBad sailor=sports; //用已知类对一个声明类赋值,其实质是调用了复制构造函数StringBad(const StringBad&);
3. c++自动提供的成员函数:a.默认构造函数,如果没有定义构造函数。 b.复制构造函数,如果没有定义。c.赋值操作符 Class_name& operator=(const Class_name&); d.默认析构函数; e.地址操作符。Empty* operator&();
4. 当函数传值传递对象或函数返回对象时,使用复制构造函数。隐式地复制构造函数是按值进行复制的,所以当类成员中有数组时,就会出现错误,因为不是复制的数组,而是复制的数组指针。析构的时候就会出错,会delete2次同一指针。
5. 将一个已有的对象赋给另外一个对象时,将使用重载的赋值操作符,初始化时,不一定会使用赋值操作符,因为可能调用复制构造函数。它的隐式实现也是对成员进行逐个复制!重新定义时,避免将对象赋给自身。
6. 静态类成员函数:不能通过对象调用静态成员函数,是public时,可以通过类名和作用域解析操作符进行调用; 静态成员函数由于不与特定的对象关联,只能使用静态数据成员。
7. 如果方法或函数要返回局部对象,则应返回对象,而不是指向对象的引用。在这种情况下,将使用复制构造函数来生成返回的对象。如果方法或函数要返回一个没有公有复制构造函数的类(如ostream)的对象,它必须返回一个指向这种对象的引用!!
8. delete可与常规new操作符配合使用,但是不能与布局new操作符配合使用。