C++ Primer 学习笔记三

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操作符配合使用。

posted on 2008-03-11 13:49 弱水一瓢 阅读(174) 评论(0)  编辑 收藏 引用 所属分类: C++ Primer


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

文章分类

最新评论