Chinaunix首页 | 论坛 | 博客
  • 博客访问: 999293
  • 博文数量: 128
  • 博客积分: 10012
  • 博客等级: 上将
  • 技术积分: 2050
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 17:49
文章分类

全部博文(128)

文章存档

2011年(16)

2009年(57)

2008年(55)

分类: C/C++

2008-11-05 15:13:43

class C
{
   int noOfMeeting;
};

class A
{
    public:
       Student(char *pName="no name");
       ...
    protected:
      
   
};

class B : public A
{
    public:
       B(char *pName, Advisor &adv) : Student(pName) //父类初始化
       {
       }
};


.多态
 子类中对父类已有成员函数进行重新定义(返回类型和参数不变,只是改变函数的内部代码实现方式, 否则就得了重载而非多态), 并加上virtual声明为虚函数,从而形成多态, 在调用此系列成员函数时由对象所属的类自动来区别调用哪个函数

 class A
 {
    public:
       virtual int getAge()
       {
       }

 }

 class B :public A
 {
    public:
        virtual int getAge()
        {
        }
  }


.虚函数限制
1) 只有类的成员函数才能成为虚函数
2) 静态成员不能是虚函数, 因为他不受限于具体对象
3) 内联函数不能是虚函数, 因为它不能在运行中动态确定其位置的
4) 构造函数不能时虚函数, 因为构造时对象还是一片未定型的空间
5) 析构函数可以是虚函数, 而且通常声明为虚函数, 如基类对象和子类对象以不同方式申请了堆空间后:
   void finishWithObject(Base *pHeapObject)
   {
       //..
       delete pHeapObject;
   }

   pHeapObject是传递过来的一个对象指针, 它或者指向基类对象或指向子类对象。 在执行delete pHeapObject时, 要调用析构函数,但是执行基类的析构函数?还是执行子类的析构函数? 将析构函数声明为虚的,就可以解决这个问题
 
 
.继承的访问控制
public:
        1)子类可以继承
        2)继承后的访问控制是public
 
protected:
        1)子类可以继承
        2)继承后的访问控制是protected
 
private:
        1)子类不可以继承
 
.protected和private
 1)在本类中两者都可以被任意成员访问
 2)在对外部调用时, 两者都不能访问 (也就是以对象方式不可访问, 如obj.proMember , obj.privMember)
 3)基类的protected成员,在子类中可以被访问
   基类的private的成员,在子类中不可以访问
 
class Base
{
   public:
         int pPub;
 
   protected:
         int pPro;
 
   private:
         int pPriv;
};
 
 
class PrivateClass: private Base  //私有继承
{
    public:
        void test()
        {
             pPub=1;   //ok:将pPub据为private
             pPro=2;   //ok:将pPub据为private
             pPriv=3;  //Error: 不可访问
        }
};
 
 
class DerivedFromPri: public PrivateClass
{
    public:
       void test()
       {
           pPub=1;  //Error: 不可访问
           pPro=2;  //Error: 不可访问
           pPriv=3; //Error: 不可访问
       }
};
 
 
 
 
class ProtectedClass: protected Base
{
    public:
       void test()
       {
           pPub=1;  //ok: 据为protected
           pPro=2;  //ok: 据为protected
           pPriv=3; //Error: 不可访问
       }
};
 
 
class DerivedFromPro :public ProtectedClass
{
    public:
       void test()
       {
           pPub=1;  //ok: 据为protected
           pPro=2;  //ok: 据为protected
           pPriv=3; //Error: 不可访问
       }
};
 
 
class PublicClass :public Base  //公共继承
{
    public:
        void test()
        {
             pPub=1;   //ok:将pPub据为pubblic
             pPro=2;   //ok:将pPub据为protected
             pPriv=3;  //Error: 不可访问
        }            
};
 
 
class DerivedFromPub :public PublicClass
{
     public:
        void  test()
        {
             pPub=1;   //ok:将pPub据为pubblic
             pPro=2;   //ok:将pPub据为protected
             pPriv=3;  //Error: 不可访问
        }            
};
 
 
int main()
{
   PrivateClass priObj;
   priObj.pPub  = 1;   //Error
   priObj.pPro  = 1;   //Error
   priObj.pPriv = 1;   //Error
 
 
   ProtectedClass proObj;
   proObj.pPub  = 1;   //Error
   proObj.pPro  = 1;   //Error
   proObj.pPriv = 1;   //Error
 
   PublicClass pubObj;
   pubObj.pPub  = 1;   //ok
   pubObj.pPro  = 1;   //Error     
   pubObj.pPriv = 1;   //Error
 
   return 0;
}
阅读(1281) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

whuter2008-11-06 14:49:18

其实就是说类的对象只能访问public成员,不能访问protected和private成员,我是这样理解的

fera2008-11-06 13:05:58

.继承的访问控制 public: 1)子类可以继承 2)继承后的访问控制是public protected: 1)子类可以继承 2)继承后的访问控制是protected private: 1)子类不可以继承 这一段没看懂。想说的是public/protected/private成员吧?最后一句啥意思?想说的是不可访问吧? 基类的protected成员,只能被其自身和子类访问 基类的private的成员,只能被自身访问