模拟虚拟构造函数

原创 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;
}
;

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

C++构造函数虚拟化

虚拟构造函数 当你有一个指针或引用,但是不知道其指向对象的真实类型是什么时,你可以调用虚拟函数来完成特定类型(type-specific)对象的行为。仅当你还没拥有一个对象但是你确切地知道想要对象的...
  • luxiaoxun
  • luxiaoxun
  • 2012-08-12 19:31:25
  • 2143

C++ 虚拟构造函数

C++标准中构造函数不支持多态,也就是说,C++的构造函数不能是虚拟的,在构造函数中调用虚函数、 也会被当做普通函数去静态链接。 有些设计方案需要“后构造”,即必须在构造了完整的对象后立即调用对象...
  • colder2008
  • colder2008
  • 2010-08-28 12:11:00
  • 1326

“虚拟”构造函数

C++中的构造函数不可能是虚拟的,所谓的“虚拟”构造函数
  • u010476094
  • u010476094
  • 2014-08-27 19:07:01
  • 471

构造函数能否调用virtual 虚函数

之前有看到在Effective C++中提及,在构造函数里面是否可以调用虚函数。在书中是明前表示不建议我们这么干的。原因也很明确,就是在构造函数中,是无法执行到派生类中对应的函数接口的。但是,是否真的...
  • helinlin007
  • helinlin007
  • 2016-01-14 23:52:16
  • 2184

C++ 虚基类构造函数的执行顺序

(1)调用基类的构造函数,多个基类则按派生类声明时           列出的次序、从左到右调用,而不是初始化列表中           的次序。 (2)调用对象成员(子对象)的构造函数,按类声明中 ...
  • Slience_Perseverance
  • Slience_Perseverance
  • 2014-03-04 09:20:13
  • 2872

Android BLE虚拟设备端

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

利用USB虚拟总线驱动模拟USB摄像头的应用层例子代码工程

  • 2016年10月08日 23:12
  • 331KB
  • 下载

Android模拟位置实现

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

比较核心的技术了 虚拟ip的一种实现方式(手工添加和C#添加)

http://www.cnblogs.com/ProJKY/p/VirtualIPAddressImp.html 虚拟IP技术在高可用领域像数据库SQLSERVER、web服务器等场景下使用很多,很...
  • mituan1234567
  • mituan1234567
  • 2015-07-22 15:02:26
  • 610

MAPGIS 虚拟狗\模拟狗

  • 2008年12月17日 16:40
  • 538KB
  • 下载
收藏助手
不良信息举报
您举报文章:模拟虚拟构造函数
举报原因:
原因补充:

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