2011/10/05~10/06 c++复习与学习

 

 前天昨天开始尝试写c++,可是发现c++的都完全没有印象了。c++那本Ivor Horton写的书以前看过,现在啥都不记得。

1. 构造函数与初始化列表

    a. 希望得到的好处: 初始化所有数据成员,而且效率高。

    但是有些类型必须在初始化列表中完成,比如引用,常量。

    http://blog.csdn.net/yuliu0552/article/details/6631509

   http://www.cppblog.com/xuesong/archive/2011/08/05/152526.html

    b. 构造对象,使用new与不使用new的区别

    http://zhidao.baidu.com/question/157478856

    new:  Class* classA=new Class() 。类指针,在堆上分配内存。通过赋值给全局变量提升其作用域。

    非new:: Class classA()。 在栈上分配内存。作用范围在大括号内。

2.  友元函数与友元类

     a.希望得到的好处:类的成员都是私有的,但是又希望个别函数或类能访问他们。

     在类里声明友元函数或类,在类外去实现就ok了。

继承与多态

1. 对象复制

   a. 希望得到的好处: 对象被赋值给同一个类对象时,能自动复制所有成员数据。

   象Java,C#,是用序列化的方式来深层复制对象,保证不论是字符串还是普通数据都是内容被copy出来。Object-C是用被成为归档的方式完成对象深层复制的。

   C++中要使用副本构造函数自己完成复制的工作。

2. 虚基类

    a. 希望得到的好处:由于是多重继承的可能,继承的基类B与C可能来源于同一个更高一层的基类A,派生对象D会包含多个A对象,在调用C中基类对象的函数func时会让

         编译器搞不清该调用B包含的A1对象的还是C中A2对象的函数func

    没事别用多继承,会乱得自己头晕的。象Java,C#,Object-C都是采用的单继承。

3. 虚函数

    基类A衍生派生类B,派生类再衍生派生类C....

    a. 希望得到的好处:因为基类指针能指向它自己的各种派生类,所以我们希望能用这一个指针就完成正确的、自动地调用派生类的函数,而不是只能调用基类的函数。

    b. 希望得到的好处:用派生类指针也能调用基类的函数,这样就不用再声明一个基类对象(或对象指针)来调用函数,节省一些代码。

    要实现a,b就要基类(不论是直接还是间接)中把你希望调用的函数声明为虚函数。

   c.  希望得到的好处:不声明为虚函数的,指针无法调用基类或派生类的非虚函数。

   要实现c,就要用指针转换。分静态与动态。静态就是把类B指针用static_cast<>()赋值给类A指针。动态就是用dynamic_cast<类A指针>(类B指针)实现类B到类A的转换。

   d 希望得到的好处: 希望构造与析构函数在指针指向不同对象时也能正确用对应的函数。

   要实现d,就要把构造与析构函数也声明为虚函数。

4. 纯虚函数与抽象类

    a. 希望得到的好处:最底层的基类一般不会拿来实例化,或者希望实现c#/Java的接口功能,让派生类必须实现一些功能。

    所以必须实现纯虚函数。要实现接口功能,就把类里的函数都声明为纯虚的。

5. 函数指针与成员函数指针

    a. 希望得到的好处:主要是回调函数方式的应用,调用者不管被调用的具体实现是什么,必须长成调用者要求的那样。在c语言中,反正没有类,函数指针只要长一样,就可以当传递。但是在c++,要把类成员函数当参数传递,就不能直接传了,而必须转换为成员函数指针。(原因是要传递this指针等等)

     感觉使用非常绕脑袋....

     http://blog.csdn.net/xujiezhige/article/details/6189671 (比较简单的介绍,如何声明成员函数指针,派生类与基类成员函数指针是否有虚函数指针性质)

      http://blog.sina.com.cn/s/blog_4298002e0100euh8.html (是否能把成员函数指针赋值给普通函数,作者认为最好的2种方法是静态成员函数与友元函数。但是作者说友元函数要使用类的静态函数,这是不对的。如果要访问成员数据,只要把对象传给友元函数就ok了。)

    http://topic.csdn.net/t/20050525/11/4033949.html#r_achor (也讨论把成员函数指针赋给普通函数,目的是让类A调用类B,C,D....的函数。如果调用与被调用方是一个基类,就可以方便的传了。作者最后结语认为基类函数指针无法象用派生类函数指针,这个说法也是错误的。因为http://blog.csdn.net/xujiezhige/article/details/6189671里面就说了要把函数指针做转化才行。这个就不象基类类指针访问派生类内指针,只要是虚函数就能自动判断。)

     http://developer.51cto.com/art/201002/182381.htm

     http://dozb.bokee.com/1783751.html

    http://hi.baidu.com/dexinmeng/blog/item/c3239c2aacc29f9a023bf663.html

    http://zhidao.baidu.com/question/235771694.html

    http://www.cppblog.com/colys/articles/25785.html

    静态成员函数可以直接赋值给普通函数指针

   int (*pf1)()=&base::func1;//普通的函数指针
    int (base::*pf2)()=&base::func2;//成员函数指针

    b. 希望得到的好处:写函数指针是非常长的,尤其是你把它做参数传给其他函数,一定要简化写法。成员函数指针也同样简化

   http://www.cppblog.com/hktk/archive/2009/09/14/96078.html

7. 类模板

    a.  虽然书上(Ivor Horton)提到了模板声明与定义分离,但实际上今天有多少编译器做到了?我目前没空做这个实验。

      http://zhidao.baidu.com/question/172346523.html?push=ql

      http://hi.baidu.com/solari_bian/blog/item/dc6093ed1f735c2fb80e2d93.html

     b.  类模板的静态成员的声明格式。

     http://topic.csdn.net/t/20060715/14/4882447.html

     http://topic.csdn.net/t/20061224/15/5252605.html

    c.  类模板做为类模板的基类,初始化列表格式的要求

     http://www.cofftech.com/thread-129-1-1.html

    d. ‘类模板说明’很像c#的Where语句,这个又被称为’类模板特化‘,’speciallization‘。

       http://www.cppblog.com/SmartPtr/archive/2007/07/04/27496.html (3种特化)

     http://www.codersource.net/c/c-tutorial-on-templates/c-class-template-specialization.aspx(写法与格式,中文很多网页不完整)

     http://www.cplusplus.com/doc/tutorial/templates/     

6. c++的回调函数如何实现   

    http://bbs.rosoo.net/thread-5922-1-1.html

    http://topic.csdn.net/t/20060105/20/4500599.html(直接把成员函数传递的问题)

    ( 成员函数指针其实不是指针http://www.yesky.com/207/1844207_2.shtml,我只看了结论,过程太长)

    引申内容,什么是boost:http://bbs.rosoo.net/thread-5922-1-1.html

7. Object-C的多态与C++的区别

    http://www.cnblogs.com/54007/archive/2011/02/11/1951355.html

8. c++ stl (可以单独看本书了)

   在xcode中使用STL一定不要忘记using namespace stad; 

    http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html(给已经了解与使用过STL的人复习概念用)

    http://www.cplusplus.com/reference/stl/ (c++ stl参考类库与函数库,不仅仅是STL)

    概念:function object,仿函数,函数适配器

    http://blog.csdn.net/sx1989827/article/details/3854048(对自己的类做自定义排序。默认排序是无法做到我们的要求的。)

   http://www.cppblog.com/baby-fly/archive/2009/12/01/102349.html

   http://www.dutor.net/index.php/2010/04/stl-functor-function-object/

   http://www.programlife.net/stl-bind1st-bind2nd-demo.html

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值