作者:张嫱的小屋_133 | 来源:互联网 | 2023-10-11 15:27
类的对象不能直接访问类声明的私有成员变量,否则破坏了信息隐藏的目的。在C++中,为了防止某些数据成员或成员函数从外部被直接访问,可以将它们声明为private,这样编译器会阻止任何
类的对象不能直接访问类声明的私有成员变量,否则破坏了信息隐藏的目的。
在C++中,为了防止某些数据成员或成员函数从外部被直接访问,可以将它们声明为private,这样编译器会阻止任何来自外部非友元的直接访问。
1.私有成员变量的四种访问方法
(1)通过公共函数为私有成员赋值
#include
using namespace std;
class Test
{
private:
int x, y;
public:
void setX(int a)
{
x=a;
}
void setY(int b)
{
y=b;
}
void print(void)
{
cout<<"x="< }
} ;
int main()
{
Test p1;
p1.setX(1);
p1.setY(9);
p1.print( );
return 0;
}
(2)利用函数访问私有数据成员
#include
using namespace std;
class Test
{
private:
int x,y;
public:
void setX(int a)
{
x=a;
}
void setY(int b)
{
y=b;
}
int getX(void)
{
return x; //返回x值
}
int getY(void)
{
return y; //返回y值
}
};
int main()
{
Test p1;
p1.setX(1);
p1.setY(9);
int a,b;
a=p1.getX( );
b=p1.getY();
cout< return 0;
}
(3)利用引用访问私有数据成员
#include
using namespace std;
class Test
{
private:
int x,y;
public:
void setX(int a)
{
x=a;
}
void setY(int b)
{
y=b;
}
void getXY(int &px, int &py) //引用
{
px=x; //提取x,y值
py=y;
}
};
int main()
{
Test p1,p2;
p1.setX(1);
p1.setY(9);
int a,b;
p1.getXY(a, b); //将 a=x, b=y
cout< return 0;
}
(4)利用指针访问私有数据成员
#include
using namespace std;
class Test
{
private:
int x,y;
public:
void setX(int a)
{
x=a;
}
void setY(int b)
{
y=b;
}
void getXY(int *px, int *py)
{
*px=x; //提取x,y值
*py=y;
}
};
int main()
{
Test p1;
p1.setX(1);
p1.setY(9);
int a,b;
p1.getXY(&a,&b); //将 a=x, b=y
cout< return 0;
}
详见 https://blog.csdn.net/KgdYsg/article/details/82492797?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159922886019724839809393%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159922886019724839809393&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v3-2-82492797.pc_ecpm_v3_pc_rank_v3&utm_term=c%2B%2B%E8%AE%BF%E9%97%AE%E7%A7%81%E6%9C%89private%E6%88%90%E5%91%98%E5%8F%98%E9%87%8F%E7%9A%84%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95&spm=1018.2118.3001.4187
2.在类外调用类的私有成员函数的两种方法
(1).通过类的public成员函数调用private成员函数
#include
using namespace std;
class Test
{
public:
void fun2()
{
fun1();
}
private:
void fun1()
{
cout<<"fun1"< }
};
int main()
{
Test t;
t.fun2();
return 0;
}
(2).通过类的友元函数调用该类的private成员函数,但是该成员函数必须设为static,这样就可以在友元函数内通过类名调用,否则无法调用
#include
using namespace std;
class Test
{
friend void fun2(); //fun2()设为类Test的友元函数
private:
static void fun1()
{
cout<<"fun1"< }
};
void fun2()
{
Test::fun1();
}
int main()
{
fun2();
return 0;
}
详见 https://blog.csdn.net/jackchoise030/article/details/86158780