C++的继承中有趣的现象

来源:互联网 发布:魔音软件 编辑:程序博客网 时间:2024/05/29 10:10

①、可以通过基类指针访问派生类的private型的虚成员函数

 

现象如下:

class A ,然后里面有一个 public:    virtual void f();

class B :public A,然后里面有一个private virtual void f();

 

现在 A *p;   p->f();        这样,可以在类外访问B类的私有成员函数 f();

 

 

②、在一个类的某成员函数中调用本类的虚成员函数的时候,这个成员函数是否是构造函数会导致调用不同层的虚成员函数。

现象如下,

class A,在A中定义一个虚成员函数 virtual void vf();,再定义一个实成员函数 void g(),在g()中调用了 vf();

class B:public A,定义一个非虚函数void p(),在这个函数中调用 g(); 再在B中重写virtual void vf();

 

现在,B x, x.p();  这个调用过程为 首先调用A::g(),借下来调用B::vf();

 

这种情况有个特里,如果A中的g()恰好是A的构造函数,则构造函数内部调用虚成员函数只会调用本层的成员函数,或者是低于于本层的成员函数。

 

测试代码如下: 使用VS2010

#include <iostream>
using namespace std;

class time
{
public:
 time()
 {
//  display();       //如果在这里写就不行,也就是说构造函数是一个特殊的函数,它内部的调用本类的虚成员函数执行本层的虚成员函数,而不多态
  hour=1;
  minute=1;
  second=1;

 }

 void f()
 {
  display();        //这里调用的是最顶层的派生类重载的display();
 }
 virtual void display()
 {
  hour=3;
  minute=3;
  second=3;
  cout<<hour<<"小时"<<minute<<"分钟"<<second<<"秒"<<endl;
 }

 int hour;
 int minute;
 int second;
};

class date:public time
{
public:
 virtual void display()
 {
  hour=2;
  minute=2;
  second=2;
  cout<<hour<<"小时"<<minute<<"分钟"<<second<<"秒"<<endl;
 }

 void g()
 {
  f();
 }
};

int main()     //C++使用多态的时候使用基类还是派生类的指针都无所谓,结果相同
{
 date t1;      
 //time *p;
 //p=&t1;       //这样可以在类外访问派生类的私有虚成员函数    
 //p->display();
 t1.g();


 return 0;
}

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信之前绑定的手机号丢了怎么办 龙之谷手游换装备洗炼材料怎么办 小学生在班上碰到流氓同学怎么办 问道手游仓库密码忘了怎么办 问道手游安全码忘了怎么办 问道手游账号密码忘了怎么办 坐一天一夜长途车腰疼怎么办 智联的简历一直说不完整怎么办 智联招聘简历投错了怎么办 投简历的公司写错面试时怎么办 从原单位辞职后档案一直没提怎么办 手机因一些不良软件扣费怎么办 苹果手机玩崩坏3卡顿怎么办 以前很帅现在变得好难看了怎么办 偷了室友东西被发现了该怎么办 自己不喜欢狗但室友养狗怎么办 夏天身上闷热出很多小红豆怎么办? 海棠果核小孩吃进肚子了怎么办 大了叶海棠有点烂根怎么办? 刚栽的月季花苗叶子蔫了怎么办 对节白蜡盆景叶尖干枯发黑怎么办 婴儿皮肤被大人指甲划出血怎么办 三岁宝宝吃了铝箔包装纸怎么办 元宝鱼烂身子烂鳍尾巴怎么办 大掌门2多余的侠客令怎么办 vivo手机关机后开不了机怎么办 红米手机重置后开机黑屏怎么办 dnf夏日套光环选错了怎么办 ios6微信版本低登录不了怎么办 捡了一个苹果手机有id怎么办 外阴长了个包出血很痛怎么办 腿上烫成泡了泡泡破了掉皮了怎么办 脚上的脚气小泡泡破了怎么办 吃鸡使用改名卡改名符号怎么办 爱派平板电脑密码忘了怎么办 电脑优酷下载总显示未知错误怎么办 文本文档打开时显字符丢失怎么办 系统文件过大无法放进u盘怎么办 淘宝上买的密钥激活不了怎么办 苹果手机玩游戏屏幕卡住不动怎么办 电脑系统安装好一排英文字怎么办