友元:在本类之外访问本类的私有成员变量
来源:互联网 发布:聊天软件下载 编辑:程序博客网 时间:2024/04/27 08:27
1、我们知道,一个类中的成员函数或是成员变量如果用private或是protected修饰,在该类以外是不能被访问的。
2、我们定义两个类CClass_A和CClass_B来辅助说明,在A类中定义一个受保护或者私有的成员变量m_a 和 一个受保护或私有的成员函数Print_A。如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include "Class_B.h"
#include <iostream>
using namespace std;
class CClass_A
{
public:
CClass_A(void);
~CClass_A(void);
protected:
//private:
int m_a;
inline void Print_A()
{
cout <<
"调用类A的私有函数"
<< endl;
}
};
3、然后在B类的构造函数中定义一个A类的对象object_A,通过这个对象访问A类中的m_a和print_A。编译会发生错误,信息如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "StdAfx.h"
#include "Class_A.h"
#include "Class_B.h"
CClass_B::CClass_B(void)
{
CClass_A object_A;
object_A.m_a = 2;
object_A.Print_A();
}
CClass_B::~CClass_B(void)
{
}
protected
private
4、由此可见,在类B中无法访问类A中的protected或是private修饰的变量或函数。在C++中有一个概念,那就是友元(friend),它与封装相反,是破坏封装性的,但是在有的时候用起来很方便。如上例,只要在类A的声明中加一句声明友元的语句,告诉编译器类B是类A的朋友,那么在类B中就能访问类A中的私有及保护权限的内容了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma once
#include "Class_B.h"
#include <iostream>
using namespace std;
class CClass_A
{
public:
CClass_A(void);
~CClass_A(void);
friend class CClass_B;
// 声明友元
//protected:
private:
int m_a;
inline void Print_A()
{
cout <<
"调用类A的私有函数"
<< endl;
}
};
5、
0 0
- 友元:在本类之外访问本类的私有成员变量
- 关于“在本类中访问本类私有静态变量”的一点疑惑解析
- 类的成员函数中可以直接访问本类形参的私有变量
- 拷贝函数访问本类的私有变量的问题
- 不使用成员函数或者友元函数访问类的私有成员变量
- C++访问类的私有成员变量的方法(友元函数、友元类)
- java类私有成员在本类中可以任意访问
- C++友元函数访问类的私有成员
- 访问类私有成员变量
- 不用友元,访问类的私有成员变量的方法
- 不用友元,访问类的私有成员变量的方法
- 不用友元,访问类的私有成员变量的方法
- 不用友元,访问类的私有成员变量的方法
- 关于访问C++类对象中私有成员变量的方法,不考虑用友元
- iOS访问类的私有成员变量及私有方法
- iOS访问类的私有成员变量及私有方法
- C++本类可以访问本身类的私有成员(即拷贝构造函数可以访问本身对象的私有成员)
- 本类的方法可以访问本类的任何一个对象的私有域、
- LeetCode 100. Same Tree
- 辛星解读之php中的重点函数第一节之数组函数
- js脚本判断checkbox是否选中?
- js限制checkbox选项个数与php获取多个checkbbox
- webservice重载问题的解决
- 友元:在本类之外访问本类的私有成员变量
- LeetCode 101. Symmetric Tree
- 等待事件之日志等待事件解决办法
- LeetCode 102. Binary Tree Level Order Traversal
- LeetCode 103. Binary Tree Zigzag Level Order Traversal
- java常用jar包用途说明
- 将java源码打成jar包
- 【黑马程序员】Java基础学习技术博客——内部类
- 今日作息及食谱(8.6)