c++ 访问控制之protect、private、public

本文详细解释了在面向对象编程中public、private及protected三种访问控制修饰符的作用和使用场景。public成员可以在类的外部被访问;private成员仅限于类内部访问;protected成员则允许在派生类中被访问。

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

protected 和privated都是针对函数定义来说的在外部程序中都不可被调用。
public表示可以被外部调用(对象.方法)

public:  数据成员和函数成员可在成员函数,友元,继承类中直接使用。亦可以作为接口,供类的用户使用(
即 A a,a.change())。

private:  数据成员和函数成员,只能在  类成员和友元 中访问。不能被继承类访问(无论何种继承),虽然作为继承类的私有成员,但 在 使用过程中,是通过调用基类的构造函数 完成参数的传递的。继承类不能访问基类的私有成员。

protect:  在基类中用法同private,基类对象不能访问。在派生类中,用法同基类的public, 其成员可被其继承类对象访问使用。
### 如何保护C++代码或应用程序 #### 使用编译器优化和混淆技术 为了防止反向工程,可以利用现代编译器提供的各种优化选项来使最终二进制文件更难以被逆向分析。此外,还可以采用专门的工具和服务来进行源码级别的混淆处理,使得即使有人获得了程序的副本也很难理解其工作原理。 #### 动态链接库(DLL)注入防护措施 对于Windows平台上的应用而言,通过`CreateRemoteThread`函数强制其他进程加载特定DLL的做法是一种常见的攻击手段[^2]。为了避免这种情况发生,开发者可以在启动时验证系统的完整性,并监控异常线程活动;也可以考虑实施基于白名单的安全策略,只允许信任的服务访问自己的资源。 #### 加密敏感数据与算法实现细节 如果项目中有重要的商业逻辑或者专有算法,则应该对其进行加密存储,在运行期间再解密执行。这样即便恶意第三方获取到了可执行文件也无法轻易得知核心业务流程是如何运作的。 #### 发布预编译版本而非源码形式的产品 尽可能提供已经过编译的目标机器指令集而不是原始的人类可读语法结构给终端客户安装部署。这一步骤本身就能有效阻止大部分不具备专业知识背景者的窥探企图。 ```cpp // Example of protecting sensitive information within compiled binaries. #include <iostream> #include <string> class SecureData { private: std::string secret; public: explicit SecureData(const char* s):secret(s){}; void showSecret(){ // Decrypt before showing actual content here... std::cout << "The decrypted message is:" << secret << "\n"; } }; int main() { const char *encryptedMessage="ThisIsAnEncryptedString"; SecureData sd(encryptedMessage); sd.showSecret(); } ``` #### 应用软件许可证条款保障权益 最后但同样重要的是,确保遵循合适的开源协议或许可证发布作品。例如GNU通用公共授权许可(GPL),它明确规定了只要求使用者在修改并分发该自由/开放源码软件时也要保持同样的权利给予后续接收者[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值