当前位置: 首页> 财经> 创投人物 > C++访问Private,Protecd的一些方法总结

C++访问Private,Protecd的一些方法总结

时间:2025/7/13 7:04:30来源:https://blog.csdn.net/qq_29523119/article/details/139707003 浏览次数:0次

前言

在编写C++程序中 我们偶尔会碰到这样的三种特殊修改变量值的需求:

[1]在不修改类原本的实现下,访问修改类的Private变量

[2]在不修改类原本的实现下,修改类的Protected变量

Private变量访问

public类模版函数特化

这种办法利用了类模版函数特化来实现,如下所示:

比如下面一个类

class TestA
{
public:template<typename DataType>void Print(DataType Data){printf("1111111111111111");}private:int a;string c;
};

上面一个类所有变量都是Private, 并且存在一个Public模版函数, 这时候就可以通过模版函数特化来进一步访问。

// 通过模版特化实现修改 TestA的a和c变量的函数
struct SetValueParam
{int a;string c;
};template<>
void TestA::Print(SetValueParam param)
{a = param.a;c = param.c;printf("a = %d, c = %s\n", a, c.c_str());
}int main()
{SetValueParam param{ 1, "Test" };TestA testA;testA.Print(param);std::cout << "Hello World!\n";
}

这种访问Private办法最大的限制是类本身得存在Public模版函数.

Protected变量访问

Protected变量访问比较常用的一种方法是用过定义母类方法来访问。

class TestB
{
protected:int a = 10;string c = "aaaa";
};class AccessClassB_a : public TestB
{
public:int GetA(){return a;}
};int main()
{TestB testb;AccessClassB_a* classBptr = (AccessClassB_a*)(&testb);printf("a = %d\n", classBptr->GetA());std::cout << "Hello World!\n";
}

在 博主Yaksue的C++ 在外部访问对象的protected成员的方法_c++对象可以方位protect成员吗-CSDN博客

有段宏代码可以快速定义访问具体某个类的某个Proteced变量的代码,比较好用, 推荐进这篇博客里拷贝使用.

资料参考

[1] C++ 在外部访问对象的protected成员的方法_c++对象可以方位protect成员吗-CSDN博客

关键字:C++访问Private,Protecd的一些方法总结

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: