C++中用#define访问类的私有成员

我们知道,类的私有成员在类的外部是不能被访问的。

例如有下面的这个简单的类:

class ClxECS
{
private:
int iPrivate;
};

那么下面的这个函数是不能通过编译的:

  void ECS_test()
{
ClxECS lx;
lx.iPrivate = 13;
  cout << lx.iPrivate << endl;
}


但是,我们并不是没有办法来访问类的私有成员。

其实,方法很简单,只要在类的声明前面加上如下一行代码就行了:

#define private public

同样的,这个方法对保护成员也适用:

#define protected public

但是,这是一个非正规的手段,它将破坏类的所有封装性。而C++中的#define的存在也是为了跟C兼容。所以只有在非常特殊的情况下,才会用这种非正规方法访问类的私有或保护成员。

时间: 2024-10-29 15:50:41

C++中用#define访问类的私有成员的相关文章

C#箴言之用属性来访问类的私有成员

访问|来访 在程序中,难免要访问某个对象的私有成员.那么以前实现这类功能的方法有两种,第一种方法最简单,就是把成员访问符从"private"改为"public"即可:而另一个就是提供公有的成员访问函数来进行访问.那么现在用C#编写程序,就不再需要采用前面所说的两种方法了,而直接使用属性来完成. 首先来看看三种方法的如何实现以及调用的,这里用一个例子来说明,即访问"EmployeeInfo"类的私有成员strName,具体如下表格所示.   pri

java 内部类-在外部类中为什么可以直接访问内部类的私有成员?

问题描述 在外部类中为什么可以直接访问内部类的私有成员? 在外部类中为什么可以直接访问内部类的私有成员?比如,root=root.next,这条语句出现在外部类的方法中,这里,root是定义在外部类中的一个内部类对象,而next是root对象的一个私有属性,为什么可以这样写? 解决方案 内部类是一个特例,相当于友元类(java本身没有友元这个概念) 从语法的角度来说,这样做是方便的.封装性主要是避免调用者随意操作对象的私有成员,调用他们不知道的代码引起问题.但是你定义了外部类,显然内部类也是你定

编程-C++数组作为类的私有成员求助

问题描述 C++数组作为类的私有成员求助 定义一个Employee类,其中包括姓名.街道地址.城市和邮编等属性,以及changeName()和display()等函数.display()显示姓名.街道地址.城市和邮编等属性,changeName()改变对象的姓名属性. 在employee.h文件中定义Employee类.Employee类具有姓名.街道地址.城市和邮编等私有数据成员,都可以用字符型数组来表示,在成员函数中,构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数st

c++-C++ 类内函数以引用作为返回值(例如返回类内私有成员变量)

问题描述 C++ 类内函数以引用作为返回值(例如返回类内私有成员变量) 主函数中用参数a接受这个返回值,那么对a的改变会引起私有成员变量的改变吗? 解决方案 返回了引用就可以修改它指向的变量.这种方式通过函数来达到修改内部变量的方式.从而改变封装的行为.不过一般要清楚这么做的目的 解决方案二: 作为引用的变量,相当于一个别名:原理上是指向同一块内存,因此对引用变量的修改就会导致原始变量跟着修改. 解决方案三: 同一个对象当然会改变.通过共有方法将私有成员传出来是很常见的做法,比如设计模式中的单例

java 内部类-为什么外部类能访问内部类的私有成员?

问题描述 为什么外部类能访问内部类的私有成员? 在学习单例时发现,外部类可以访问内部类的私有成员 如下面代码所示: //Initialization on Demand Holder class Singleton { private Singleton() { } private static class HolderClass { private final static Singleton instance = new Singleton(); } public static Single

c++-C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组?

问题描述 C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组? 写了这样一个类: class Base{ private: int r[MAX_SIZE]; int length; public: Base() { r[MAX_SIZE] = {1,2,0,5,8,9,7,3,6,4}; //编译的时候在这边出错 length = 10; } void swap_data(int,int); void Show(const Base &ob); friend int Bubble

c++-用友元类外函数调用类的私有成员,显示无法调用,是什么原因

问题描述 用友元类外函数调用类的私有成员,显示无法调用,是什么原因 #include #include using namespace std; class Date; class Time { private: int hour; int minute; int sec; public: Time(int h, int m, int s) :hour(h), minute(m), sec(s){} friend void display(Time & , Date & ); }; cla

C#中访问私有成员

首先我必须承认访问一个类的私有成员不是什么好做法.大家也都知道私有成员在外部是不能被访问的.而一个类中会存在很多私有成员:如私有字段.私有属性.私有方法.对于私有成员访问,可以套用下面这种非常好的方式去解决. private string name; public string Name { get { return name; } set { name = value; } } 但是有时候,源代码是别人的,你就不能修改源代码,只提供给你dll.或者你去维护别人的代码,源代码却有丢失.这样的情况

一起谈.NET技术,C#中访问私有成员

首先我必须承认访问一个类的私有成员不是什么好做法.大家也都知道私有成员在外部是不能被访问的.而一个类中会存在很多私有成员:如私有字段.私有属性.私有方法.对于私有成员访问,可以套用下面这种非常好的方式去解决. private string name;public string Name{get{return name; }set{ name = value; }} 但是有时候,源代码是别人的,你就不能修改源代码,只提供给你dll.或者你去维护别人的代码,源代码却有丢失.这样的情况如果你想知道私有