热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c++访问私有成员变量和私有成员函数的常用方法

类的对象不能直接访问类声明的私有成员变量,否则破坏了信息隐藏的目的。在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


推荐阅读
author-avatar
张嫱的小屋_133
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有