c++关于protected成员的访问有关问题

c++关于protected成员的访问问题
#include <iostream>
using namespace std;

class B{
protected:
int test = 0;
public:
void get(int& i) {
i = test;
}
void set(int i) {
test = i;
}
void fun(B& b) {
test = b.test;//这里为什么可以直接访问?
};

};

int main() {
B b1;
b1.set(10);
B b2;
b2.fun(b1);
int temp=0;
b2.get(temp);
cout << temp<<endl;
system("pause");
return 0;
}
编译后b2的test 的值是10,但在fun()中是直接访问b1的test成员 为什么没有出错? 
------解决思路----------------------
因为fun()是B类的成员函数,成员函数可以访问该类的所有成员变量。
------解决思路----------------------
引用:
求真相....

你为什么认为不能,test 是他自己的成员能访问有什么问题么?
------解决思路----------------------
protected
C++ Specific —>

protected: [member-list]

protected base-class

When preceding a list of class members, the protected keyword specifies that those members are accessible only from member functions and friends of the class and its derived classes. This applies to all members declared up to the next access specifier or the end of the class.

When preceding the name of a base class, the protected keyword specifies that the public and protected members of the base class are protected members of the derived class.

Default access of members in a class is private. Default access of members in a structure or union is public.

Default access of a base class is private for classes and public for structures. Unions cannot have base classes.

For related information, see public, private, friend, and Table of Member Access Privileges.

END C++ Specific

Example

// Example of the protected keyword
class BaseClass
{
protected:
   int protectFunc();
};

class DerivedClass : public BaseClass
{
public:
   int useProtect()
      { protectFunc(); }    // protectFunc accessible
                           //    from derived class
};

void main()
{
BaseClass aBase;
DerivedClass aDerived;
   aBase.protectFunc();     // Error: protectFunc not
                            //    accessible
   aDerived.protectFunc();  // Error: protectFunc not
                            //    accessible in derived class
}

------解决思路----------------------
引用:
Quote: 引用:

因为fun()是B类的成员函数,成员函数可以访问该类的所有成员变量。

但是b2调用fun访问了b1的私有成员.. 这可以吗..


b2、b1只是实例不同类代码还是同一套。
C++可能没做过多的约束(没有深究这个问题);C#3.x以后就不能这么用了,但不么这么用很带来很多不方便…………。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

求真相....

你为什么认为不能,test 是他自己的成员能访问有什么问题么?


但是b2调用fun访问了b1的私有成员.. 这可以吗..


可以的,这里的访问权限指的是写代码的地方,这里调用test的代码不是还在b类里么;
这是语法问题,没必要深究;