为C++的类添加属性和事件

为C++的类添加属性和事件

在Visual Basic中,一个类具有属性、方法和事件等几个特征,而C++中的类只提供方法,使用时稍显麻烦。本文的目的就是在C++的类中模拟实现属性和事件。

 (C)ShiShengSoft原创文章,转载请注明出处:http://blog.csdn.net/shishengsoft/

一、类的属性

首先,我们看看在VB中如何编写一个类MyClass的属性。

Private m_MyProperty As Long
'写属性
Property Let MyProperty(ByVal value As Long)
             m_MyProperty = value
End Property
'读属性
Property Get MyProperty() As Long
             MyProperty = m_MyProperty
End Property

当使用这个类创建对象后,它的属性调用方法如下:

Dim theClass As New MyClass

theClass.MyProperty = 100 '写属性
Dim i As Long
i = theClass.MyProperty            '读属性

由上可见,在VB中,属性的读和写两个过程使用了同一个名字MyProperty。而在C++的类中,完成这个功能通常是使用set和get两个方法来实现的。那么,可以让C++也使用同一个名字的方法来实现属性的读和写呢?答案是肯定的。

我们先看看,在C++中如何用set和get方法来改变成员变量的。

类的代码如下:

class MyClass
{
public:
             void setMyProperty(long value)
             {
                 m_MyProperty = value;
             }

             long getMyProperty()
             {
                 return m_MyProperty;
             }

private:
             long m_MyProperty;
};

用这个类创建一个对象,其调用代码如下:

MyClass theClass ;
theClass.setMyProperty(100);
long i=theClass.getMyProperty();

以上可以看出,为了读和写类的私有成员变量m_MyProperty,分别使用setMyProperty和getMyProperty两个方法。

而C++提供了一种函数重载的技术,可以实现上面VB属性那样,只用一个MyProperty方法来完成setMyProperty和getMyProperty的功能。只要将类的代码改成如下即可。

class MyClass
{
public:
             void MyProperty(long value)
             {
                 m_MyProperty = value;
             }

             long MyProperty()
             {
                 return m_MyProperty;
             }

private:
             long m_MyProperty;
};

而这个类的对象的使用如下:

MyClass theClass ;
theClass.MyProperty(100);
long i=theClass.MyProperty();

如此是否显得简洁一些呢?下面我们再看如何实现事件过程。

二、类的事件

先来看看在VB中如何使用类的事件。特别指出,这里的事件不是Windows的消息事件,而是类的自定义事件。

'在类中声明一个事件
Public Event MyEvent()
'触发一个事件
RaiseEvent MyEvent

在创建对象后如何调用这个事件呢?如下:

'声明一个事件类的对象,注意WithEvents关键字
Public WithEvents theClass As MyClass
'创建对象,不能和声明放在一条语句
Set theClass = New MyClass

'调用事件
Private Sub theClass_MyEvent()
            '添加事件处理代码
End Sub
在VB中提供了类的事件机制,它在对象内部的数据改变时,可以通知用户在外部进行处理,提高了与用户的交互能力。

接下来我们看看在C++中如何实现类似的事件功能。先看类的代码:

class MyClass
{
             typedef void (*pFunc)(void);
public:
             void MyEvent(pFunc pEventFunc)
             {
                 m_pMyEvent=pEventFunc;
             }
    
             void Run()
             {
                 try
                 {
                     m_pMyEvent();       
                 }
                 catch(...){}
             }
private:
             pFunc m_pMyEvent; // 保存事件函数的指针
};

接着看调用对象的代码,如下:

//事件函数
void EventFunc(void)
{
             cout<<"raise event. "<<endl;
}

int main()
{
             MyClass theClass ;
             theClass.MyEvent(EventFunc);
             theClass.Run();
             return 0;
}

由上面代码可知,在C++中,其实就是使用回调函数来模拟类似于VB的类的事件机制。首先将一个函数的指针保存的类的私有变量中,当需要触发事件时,则通过先前保存的函数指针来调用函数即可。

暫时写这么点(这么多),读者若有不明之处,日后再说。

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值