egg egg::E(100);静态成员(对象)是如何调用非静态的、私有的成员(构造)函数的呢?

下面是一个有趣的例子:

类egg有一个静态数据成员E和静态成员函数instance,instance的返回类型是指向egg对象的指针,类的构造函数是私有的。

显然,我们不能创建该类的对象。但是该类确有一个对象存在,我们可以访问那个对象,也可以通过该对象访问其成员函数:

//---------------------------------------------------------------------------
#include <iostream.h>
class egg
{
private:
    static egg E;
    int i;
    egg(int I):i(I){}
public:
    static egg* instance()
    {
    	return &E;
    }
    int val()
    {
        return i;
    }
};
//---------------------------------------------------------------------------
egg egg::E(100);	//OK, but How????

int main(int argc, char* argv[])
{
  	//egg x(1); //Error: 不能调用私有的构造函数,因此,不能创建新的对象
	cout<<egg::instance()->val()
    	<<endl;
	return 0;
}
//---------------------------------------------------------------------------
 

来源于《C++语言程序设计》第十章 类与对象 第六节 静态成员 例10-24
版权所有:清华大学计算机系&清华同方股份有限公司
 
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值