gpt4 book ai didi

c++ - 两个类——如何从另一个类访问一个类的对象?

转载 作者:行者123 更新时间:2023-11-27 23:32:50 27 4
gpt4 key购买 nike

我有两个类,TProviderTEncrypt。调用应用程序将与 TProvider 类对话。调用应用程序将首先调用Initialise 以获取句柄mhProvider。稍后当我尝试执行加密时,我需要访问此句柄,因为 TEncrypt 类无权访问此句柄 mhProvider。我怎样才能访问这个句柄?

class TProvider
{
public:
int Initialise();
int Encrypt();
private:
HCRYPTPROV mhProvider;
TEncrypt* mpEncrypt;
};
//------------------------------------
class TEncrypt
{
public:
int Encryption();
private:
int GenerateEncryptionKey();
HCRYPTKEY mhKey;
};
//------------------------------------
int TEncrypt::Encryption()
{
vStatus = GenerateEncryptionKey();
// will go on to perform encryption after obtaining the key
return(vStatus);
}
//------------------------------------
int TEncrypt::GenerateEncryptionKey()
{
BOOL bRet = CryptGenKey(mhProvider,
CALG_AES_256,
CRYPT_EXPORTABLE,
&mhKey);
}

最佳答案

要么通过(构造函数/方法)参数将句柄传递给 TEncrypt,要么通过全局变量使其可用。我更喜欢前者,因为全局变量使代码更难理解、维护和测试。

可用性也可能是间接的,例如您将一个对象传递给 TEncrypt::Encryption(),它通过其公共(public)方法之一提供对句柄的访问。

(当然你也可以通过一个文件,DB,...传递它,但是让我们把焦点放在程序中。)

更新:一个例子

class TEncrypt
{
public:
int Encrypt(HCRYPTPROV& mhProvider);
private:
int GenerateEncryptionKey(HCRYPTPROV& mhProvider);
HCRYPTKEY mhKey;
};
//------------------------------------
int TEncrypt::Encrypt(HCRYPTPROV& mhProvider)
{
vStatus = GenerateEncryptionKey(mhProvider);
// will go on to perform encryption after obtaining the key
return(vStatus);
}
//------------------------------------
int TEncrypt::GenerateEncryptionKey(HCRYPTPROV& mhProvider)
{
BOOL bRet = CryptGenKey(mhProvider,
CALG_AES_256,
CRYPT_EXPORTABLE,
&mhKey);
}

注意:我重命名了 TEncrypt::Encrypt,因为使用动词作为方法名比使用名词更好。

关于c++ - 两个类——如何从另一个类访问一个类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3769088/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com