在类的内部访问类的私有数据成员的方法;
在类的外部访问类的私有数据成员的方法;
一个普通函数访问一个类的私有数据成员的两种方法?
是的,给你举例
在主窗口类中创建公有成员函数,通过在类中获取私有成员来供其他类对其进行访问及修改:
class A{
public:
int* getNum(){
return #
}
private:
int num;
}
class B{
public:
void setNum(int num){
*(a->getNum) = num;
}
private:
A *a;
}
在主窗口类中将对话框类声明为友元类(friend),当在对话框类中声明主窗口类对象后,即可直接访问该对象的所有成员(包括私有成员):
class A{
public:
friend class B;
private:
int num;
}
class B{
public:
void setNum(int num){
a->num = num;
}
private:
A *a;
}
内部通过Set函数,外部通过指针
class Test
{
public:
void SetA(int _a)//接口(可以从类外设置a的值)
{
a = _a;
}
void Print()
{
cout << a << endl;
cout << b << endl;
cout << endl;
}
private:
int a = 10;
int b = 100;
};
int main()
{
Test s;
s.Print();
s.SetA(0);//通过接口把a设置为0;
s.Print();
Test* ps = &s;
int * ps1 = ((int *)ps + 1);
*ps1 = 0;//通过指针把b设置为0;
s.Print();
system("pause");
return 0;
}
外部
#include <iostream>
using namespace std;
class A
{
public:
A(int i = 0)
:m_i(i)
{}
void print()
{
cout << "m_i" << this->m_i << endl;
}
private:
int m_i;
};
int main(int argc, char **argv)
{
A a(10);
// 初始化后的a的私有变量是10
a.print();
//可以通过指针访问a中的m_i变量
int *pi = (int *)&a;
cout << "a::m_i: " << *pi << endl;
//通过指针更改m_i
*pi = 11;
//我们看到对象a中的私有变量m_i已经被改变
a.print();
return 0;
}
如果是其他类,还可以通过友元函数