C++日记

最近在玩C++,想找个地方把自己学习的感悟记录下来。于是就想到了这个地方,这篇文章会不断的更新,希望自己能坚持......

一 关于指向对象成员函数的指针的问题

     定义指针:数据类型名 (类名::*指针变量名)(参数列表);

     指针赋值:指针变量名=&类名::成员函数名;//千万不要把函数的参数列表带上

     引用:(对象名.*指针变量名(参数列表);//前面那对括号一定要

     另外,只有公用成员才能这样通过指针来访问

     eg.

          class test

          {

           public:

                  int getarea();

           ......

          };

         test A;

         int (test::*p)();

         p=&test::getarea;//不要写成:p=&test::getarea();

         cout<<(A.*p)()<<endl;//不要写成:cout<<A.*p<<endl;cout<<A.*p()<<endl;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

二 关于纯虚函数

    一般形式:

        virtual 函数类型 函数名 (参数列表) =0;

    注意问题:

         1.一个类中含有纯虚函数,叫做抽象类.抽象类只能被继承,不能被实例化.

            //eg.

                 现在我有一个抽象类circle,那么我就不能在类外出现这样的语句:  circle A;

         2.纯虚函数在派生类中必须重载,否则不能通过.并且重载时,函数的形式要与声明纯虚函数时一样.

            //eg.

                 virtual double get_a ()const=0;

                 virtual double get_a()   //错误,要加上const

                  {return 3.14;}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

三 申明指针必须初始化

  eg.  char *a;

          cin>>a;   //错误,由于指针没有初始化,很容易跑飞

          应该这样:

          char *a=new char[10];  //a只能存储10个字符

          cin>>a;

posted @ 2011-10-25 16:50  天米  阅读(283)  评论(0编辑  收藏  举报