模拟虚拟构造函数

原创 2007年10月09日 10:10:00
        在C++面向对象程序设计中,我们都知道析构函数是可以虚拟的,但构造函数确是不能够虚拟的。原因在于虚拟调用是一种能够在给定信息不完全的情况下工作的机制。特别地,虚拟允许我们调用某个函数,对于这个函数,仅仅知道它的接口,而不知道具体的对 象类型。但是要建立一个对象,你必须拥有完全的信息。特别地,你需要知道要建立的对象的具体类型。因此,对构造函数的调用不可能是虚拟的。
  但我们可以模拟虚拟构造函数。
class Base
...{
    
public:
        Base(
string key):m_key(key)...{}
        
string GetKey()...{
            
return m_key;
        }

        
virtual int GetValue()=0;
    
private:
        
string m_key;
}
;

class A:public Base
...{
public:
    A(
string key):Base(key)...{}
    
int GetValue()...{
        
return 1;
    }

}
;

class B:public Base
...{
public:
    B(
string key):Base(key)...{}
    
int GetValue()...{
        
return 2;
    }

}
;

class C:public Base
...{
public:
    C(
string key):Base(key)...{}
    
int GetValue()...{
        
return 3;
    }

}
;
class Wrap
...{
public:
    Wrap(
string key)...{
        
if(key=="a") m_obj= new A(key);
        
if(key=="b") m_obj= new B(key);
        
if(key=="c") m_obj=new C(key);
    }

    
~Wrap()...{
        delete m_obj;
    }

    Base 
*GetObj()...{
        
return m_obj;
    }

private:
    Base 
*m_obj;
}
;

这样的设计方案也许会对我们的程序设计有所帮助

将构造函数和非成员函数虚拟化

虚拟构造函数: 从字面来看,谈论“虚拟构造函数”没有意义。当你有一个指针或引用,但是不知道其 指向对象的真实类型是什么时,你可以调用虚拟函数来完成特定类型(type-specific)对象的行为。仅...
  • wangdamingll
  • wangdamingll
  • 2016年11月17日 19:35
  • 144

C++模拟键盘按键

这个与模拟鼠标点击的函数差不多,直接上函数 keybd_event(VK_RETURN,0,0,0); keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); 这...
  • everlasting_20141622
  • everlasting_20141622
  • 2016年08月17日 18:55
  • 3577

JavaScript 模拟类(class)的三种方法

将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言。如果你忘了填写用户名,它就跳出一个警告。 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途。程序员...
  • wabil
  • wabil
  • 2016年01月08日 09:14
  • 556

C#陷阱之构造函数调用虚方法

先说问题描述,现在有一个Test的类,其信息如下: class Test { public string info = "测试类的成员"; }定义一个人类的类信息: class...
  • maple__leaves
  • maple__leaves
  • 2015年09月12日 01:15
  • 1047

模拟来电的实现

模拟来电这个功能其实Android原生就有实现,想想Android模拟器是可以来电或者拨号的吧。这个功能对于手机厂商的程序员来说,节省了大量调整UI的时间,不用去真的打电话来呈现UI。实现有两种方式:...
  • firedancer0089
  • firedancer0089
  • 2017年05月15日 15:45
  • 677

Android tips(十)-->允许模拟位置在Android M下的坑

本文我们将讲解允许模拟位置在Android M下的坑。做地图类应用的同学应该都知道为了避免软件模拟位置影响正常流程的进行我们一般都会判断用户手机是否打开了模拟位置设置,若打开了则终止用户流程,提醒用户...
  • qq_23547831
  • qq_23547831
  • 2016年08月02日 22:26
  • 10516

Android BLE虚拟设备端

简介Android5.0以上的系统可以作为在BLE通信中的设备端,能够开启服务接收其他手机发送来的数据。 大致的通信过程如下: 打开蓝牙–添加服务和特征值–发送广播数据。 其他手机接收到广播数据...
  • hbdatouerzi
  • hbdatouerzi
  • 2017年07月10日 19:46
  • 238

VC使用API和发送键盘消息模拟键盘(组合键)消息

Windows大行其道的今天,其界面的操作方式早已被广大用户认可。Windows应用程序大多数都是基于窗体的程序,在大多数情况下,这些程序接收用户输入分为两种:键盘输入和鼠标输入。有时,对于繁杂的,或...
  • feilongzaitianhehe
  • feilongzaitianhehe
  • 2015年09月08日 13:53
  • 3249

Android模拟位置实现

Android上有很多位置欺骗软件,当你打开微信搜索附近的,可以通过这类软件把你位置定位到指定位置。 今天,我们就使用Android自带的模拟位置功能来实现。 准备工作: 1:设置-开发者选项-允许模...
  • Aslanchen
  • Aslanchen
  • 2015年02月03日 14:49
  • 61406

USB设备驱动开发之扩展(利用USB虚拟总线驱动模拟USB摄像头)

fanxiushu 2016-10-08 转载或引用,请注明原始作者 做这个事情写这篇文章之前,压根没朝模拟USB摄像头这方面去想过。 直到CSDN上一位朋友提出问题,才想到还有这么一个玩意。...
  • fanxiushu
  • fanxiushu
  • 2016年10月08日 23:24
  • 3528
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模拟虚拟构造函数
举报原因:
原因补充:

(最多只允许输入30个字)