函数来访问m_nvalue

封装在编程中是一个关键概念,通过使用访问函数(如SetValue和GetValue)来保护成员变量m_nvalue,可以避免因变量重命名导致的代码破坏。封装隐藏了类的实现细节,使得程序员可以使用类而无需了解其内部工作原理,同时防止了意外的修改和滥用。此外,封装还有助于防止程序错误,因为所有对变量的修改都通过统一的函数进行,便于调试时追踪问题。封装提高了代码的可维护性,允许在不影响使用类的程序情况下,自由地更改类的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尽管该项目工作的很好,如果我们决定重新命名m_nvalue会发生什么?我们也破坏了我们的计划!封装了我们改变我们的班级没有打破所有的代码使用它们的能力。

这里是封装的版本的这类使用访问函数来访问m_nvalue:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Change
{
private:
    int m_nValue;
 
public:
    void SetValue(int nValue) { m_nValue = nValue; }
    int GetValue() { return m_nValue; }
};
 
int main()
{
    Change cChange;
    cChange.SetValue(5);
    std::cout << cChange.GetValue() << std::endl;
}

现在,当我们决定要重命名m_nvalue,我们只需要改变SetValue和getvalue()反映变化。我们的程序不需要任何改变!

第二,隐藏详细了解类是如何实现的手段,程序员可以使用类而不知道它是如何实现的。第三,有助于防止意外的改变和滥用的封装。

由于成员变量不能直接访问,这有助于防止无意中改变值。此外,它是通常的情况下,当一个值被修改,其他值也需要更新。此外,它是通常的情况下,当一个值被修改,其他值也需要更新。例如,在一个典型的字符串,字符串时,改性,长度也需要更新。如果用户直接访问字符串,他/她会忘记更新时的长度的字符串改。然而,一个接口的功能,允许用户改变字符串的长度时,可以自动更新更改字符串,这意味着用户不必担心它!

最后,封装可以帮助您调试程序时出错。通常当程序不能正常工作,这是因为我们的一个成员变量具有不正确的值。如果每个人都能够直接访问变量,追踪这段代码修改的变量可以是困难的。然而,如果每个人都要调用相同的函数,修改一个变量,你可以简单的断点功能,观察每个人的变化值直到你看到哪里错了。

正如你所看到的,封装为一点点的努力提供了许多好处。特别是,改变类的实现细节,而不影响任何使用该类的程序代码的可维护性的能力是最重要的!


class AFX_EXT_CLASS CHMConfigFile { public: CHMConfigFile(); CHMConfigFile(char* szFilename); // 惑措版肺(相对路径) virtual ~CHMConfigFile(); BOOL SetFileName(char* szFilename); BOOL WriteToFile(); BOOL WriteToFileRMM(); void SetRewriteMode(BOOL bRewrite) { m_bRewrite = bRewrite; } BOOL GetRewriteMode() { return m_bRewrite; } ////////////////////////////////////////////////////////////////////////// int GetItemValue(char* szName, CString& strValue, char* strDefault = NULL); int GetItemValue(char* szName, int& nValue, int nDefault = 0); int GetItemValue(char* szName, unsigned short &nValue, unsigned short sDefault = 0); int GetItemValue(char* szName, double& dValue, double dDefault = 0.0); int GetItemValue(int nIdx, char* szName, CString& strValue, char* strDefault = NULL); int GetItemValue(int nIdx, char* szName, int& nValue, int nDefault = 0); int GetItemValue(int nIdx, char* szName, unsigned short &nValue, unsigned short sDefault = 0); int GetItemValue(int nIdx, char* szName, double& dValue, double dDefault = 0.0); ////////////////////////////////////////////////////////////////////////// BOOL SetItemValue(char* szName, char* szvalue); BOOL SetParamItemValue(char* szName, char* szvalue); BOOL SetItemValue(char* szName, int& nValue); BOOL SetItemValue(char* szName, unsigned short &nValue); BOOL SetItemValue(char* szName, double& dValue); BOOL SetItemValue(int nIdx, char* szName, char* szvalue); BOOL SetItemValue(int nIdx, char* szName, int& nValue); BOOL SetItemValue(int nIdx, char* szName, unsigned short &nValue); BOOL SetItemValue(int nIdx, char* szName, double& dValue); void RemoveAllItem(); BOOL RemoveItem(char* szName); BOOL RemoveItem(int nIdx, char* szName); // OhByungGil Modify -> LogFile Write void SetLogMode(BOOL bMode) { m_bLogMode = bMode; } BOOL GetLogMode() { return m_bLogMode; } void SetLogFilePath(CString strLogFilePath) { m_strLogFileName = strLogFilePath;} CString GetLogFilePath() { return m_strLogFileName; } void WriteLog( char* szName, char* szvalue ); void WriteLog( char* szName, int& nValue ); void WriteLog( char* szName, unsigned short &nValue ); void WriteLog( char* szName, double& dValue ); protected: BOOL WriteToLogFile(CString& strContents); private: CString m_strFileName; CObList m_ItemList; int m_nItemCount; BOOL m_bRewrite; CString m_strLogFileName; // OhByungGil 100531 BOOL m_bLogMode; CRITICAL_SECTION m_cs; };
最新发布
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值