C++编程中私有和保护以及公有的类成员访问控制

2020-01-06 14:28:01王冬梅

也声明为 static 的保护成员对派生类的任何友元或成员函数均可访问。也声明为 static 的保护成员对派生类中的友元或成员函数可访问,但只能通过指向派生类的指针、对派生类的引用或派生类的对象。
例子


// keyword_protected.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class X {
public:
  void setProtMemb( int i ) { m_protMemb = i; }
  void Display() { cout << m_protMemb << endl; }
protected:
  int m_protMemb;
  void Protfunc() { cout << "nAccess allowedn"; }
} x;

class Y : public X {
public:
  void useProtfunc() { Protfunc(); }
} y;

int main() {
  // x.m_protMemb;     error, m_protMemb is protected
  x.setProtMemb( 0 );  // OK, uses public access function
  x.Display();
  y.setProtMemb( 5 );  // OK, uses public access function
  y.Display();
  // x.Protfunc();     error, Protfunc() is protected
  y.useProtfunc();   // OK, uses public access function
            // in derived class
}


public
语法


public:
  [member-list]
public base-class

备注
当位于类成员列表前面时,public 关键字指定这些成员可从任何函数访问。这适用于声明到下一个访问指示符或类的末尾的所有成员。
当位于基类名称前面时,public 关键字指定基类的公共和受保护成员分别是派生类的公共成员和受保护成员。
类中成员的默认访问是私有的。结构或联合中成员的默认访问是公共的。
基类的默认访问对于类是私有的,而对于结构是公共的。 联合不能具有基类。
例子


// keyword_public.cpp
class BaseClass {
public:
  int pubFunc() { return 0; }
};

class DerivedClass : public BaseClass {};

int main() {
  BaseClass aBase;
  DerivedClass aDerived;
  aBase.pubFunc();    // pubFunc() is accessible 
             //  from any function
  aDerived.pubFunc();  // pubFunc() is still public in 
             //  derived class
}
 

注:相关教程知识阅读请移步到C++教程频道。