赋值兼容----只能通过这个指针访问派生类中由基类继承来的基类成员(虚函数能突破这个限制)

 
 
/*************************************************************/
 
#include <iostream.h>
 
class A{
private:
  //…其它成员
public:
  virtual void func(int data){cout<<”class A:”<<data<<endl;}
  void func(char *str){ cout<<”class A:”<<str<<endl; }
};
class B: public A{
//…其它成员
public:
  void func() {cout<<”function in B without parameter! \n”;}
  void func(int data) { cout<<”class B:”<<data<<endl; }
  void func(char *str){ cout<<”class B:”<<str<<endl;}
//virtual void func(int data){cout<<”class A:”<<data<<endl;}基类继承而来的旧成员
//void func(char *str){ cout<<”class A:”<<str<<endl; }基类继承而来的旧成员
};
int main(int argc,char *argv[])
{A a;
  A *pA;
  B b;
  pA=&b;
 pA->func(“haha”); //class A: haha //因为不是虚函数,基类指针只能指向派生类中基类的部分,不能访问新增
pA->func(1); //class B: 1//因为是虚函数,突破了上面的限制。基类指针
// pA->func();正确?no,是可以将一个派生类的地址赋给基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的基类成员,不能访问派生类的新成员。
 a.func("hahha");//
b.func("hahha");//同名覆盖class B:haha
a.func(1);//各过各的class A: 1
b.func(1);//各顾各的class B: 1
 
 
  return 0;
}
 
/*******************************************************************/
 
问题1:(本小题4分)在下面写出程序的运行结果:
 问题2:(本小题2分)如下句所示,在函数main()中通过pA调用类B中定义的参数表为空的
函数pa->func() :
是否正确? 
答:(正确/不正确)
 问题3:(本小题10分)如果要记录已尼创建的A类的实例(对象)的个数,我们可以借助
 于类的静态成员。修改上面类A的定义,使得它包含一个私有的静态成员object_count,记
 录属于该类的对象的个数,然后为类A增加必要的成员函数,使得下面的程序:
 void main()
{
A *pA=new A[3];
 cout<<”There are ”<<pA->GetObjectCount()<<” objects”<<endl;
  delete []pA;
  cout<<”There are ”<<A::GetObjectCount()<<” objects”<<endl;
}
得到的输出为:
There are 3 objects
There are 0 objects
 下面写出类A的定义(将所有的函数成员实现写在类定义体中):
 在下面写出初始化类的静态成员object_count的语句: 
答案:
 问题1: 
答:输出结果为: 
class B: 1
 class A: haha
问题2:
答:不正确。
问题3:类A的定义如下:
class A{
 private:
  static object_count;
  //…其它成员
public:
  A(){ object_count++;}
  ~A(){ object_count—; }
 static int GetObjectCount(){ return object_count; }
 
//其它函数
virtual void func(int data){cout<<”class A: “<<data<<endl; }
void func(char *str){ cout<<”class A: “<<str<<endl; }
};
object_count的初始化语句如下:
int A::object_count=0;
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值