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

private
语法

private:
  [member-list]
private base-class

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

// keyword_private.cpp
class BaseClass {
public:
  // privMem accessible from member function
  int pubFunc() { return privMem; }
private:
  void privMem;
};

class DerivedClass : public BaseClass {
public:
  void usePrivate( int i )
   { privMem = i; }  // C2248: privMem not accessible
             // from derived class
};

class DerivedClass2 : private BaseClass {
public:
  // pubFunc() accessible from derived class
  int usePublic() { return pubFunc(); }
};

int main() {
  BaseClass aBase;
  DerivedClass aDerived;
  DerivedClass2 aDerived2;
  aBase.privMem = 1;   // C2248: privMem not accessible
  aDerived.privMem = 1; // C2248: privMem not accessible
             //  in derived class
  aDerived2.pubFunc();  // C2247: pubFunc() is private in
             //  derived class
}

protected
语法

protected:
  [member-list]
protected base-class

备注
protected 关键字指定对 member-list 中的成员直到下一个访问说明符(public 或 private)或类定义的末尾的访问。只能通过以下项使用声明为 protected 的类成员:
最初声明这些成员的类的成员函数。
最初声明这些成员的类的友元。
使用公共或受保护访问(派生自最初声明这些成员的类)派生的类。
也对受保护成员具有专用访问权限的以私有方式派生的直接类。
当以基类的名称开头时,protected 关键字指定基类的公共成员和保护成员是其派生类的保护成员。
保护成员不像 private 成员那样专用,private 成员仅对从中声明它们的类的成员可访问,但保护成员也不像 public 成员那样公开,public 成员在任何函数中均可访问。
也声明为 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 allowed\n"; }
} 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
}
(0)

相关推荐

  • VC++中HTControl控制类使用之CHTDlgBase对话框基类实例

    本文所述为VC++界面编程的一个MFC例子,基于HTControl控件类的CHTDlgBase对话框基类主文件代码.该程序可完成动态创建框架窗体,窗体外观(客户区与非客户区),调整窗体大小,无效子窗口的控制等功能. 具体实现代码如下: /**************************************************************************** | Copyright (c) 2012, | ******************************

  • VC++中HTControl控件类的CHTSlider控制杆控件类简介

    本文所述的是HTControl控件中的一个控制杆控件类文件代码,此类是完全独立的,没有任何基类.直接由WIN32 API实现.你可以在SDK,MFC,wxWidget等等方式下使用它.控制中包括一个垂直的控制杆控件,使用方式和水平的完全相同.窗体必须动态创建,具体代码段如下: m_HTSliderR.Create(130, 500, 400, 14, m_hWnd, iChildId++, 0, 9, 14); m_HTSliderR.SetBgPic(_T(".\\pic\\SliderBg.

  • C++ 类访问控制的条件总结

    C++ 类访问控制的条件总结 最近在使用C++创建类的时候,忽然发现自己对于类访问控制 public,protected,private 的作用没有理解透彻,后来就查了些资料,这里以作记录. 访问控制 C++类的重要属性就是封装和继承.因此,最关键的问题就是权限 的问题,public,protected,private 控制的就是访问权限. public protected private 类成员是否可以访问 Yes Yes Yes 友元函数是否可以访问 Yes Yes Yes 子类是否可以访问

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

    private 语法 private: [member-list] private base-class 备注 当位于类成员列表之前时,private 关键字指定这些成员仅可从成员函数和该类的友元中进行访问.这适用于声明到下一个访问指示符或类的末尾的所有成员. 当位于基类的名称之前时,private 关键字指定基类的公共成员和受保护成员为派生类的私有成员. 类中成员的默认访问是私有的.结构或联合中成员的默认访问是公共的. 基类的默认访问对于类是私有的,而对于结构是公共的. 联合不能具有基类. 例

  • 实例讲解C++编程中的虚函数与虚基类

    虚函数 ① #include "stdafx.h" #include <iostream> using namespace std; class B0//基类B0声明 { public: void display(){cout<<"B0::display()"<<endl;}//公有成员函数 }; class B1: public B0//公有派生类B1声明 { public: void display(){cout<<

  • 详解Java设计模式编程中的策略模式

    定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过的行为类模式中,有一种模式也是关注对算法的封装--模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装类Context,它与模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context中

  • 详解C++编程中的私有继承和公有继承

    C++类的私有继承 在声明一个派生类时将基类的继承方式指定为private的,称为私有继承,用私有继承方式建立的派生类称为私有派生类(private derived class ), 其基类称为私有基类(private base class ). 私有基类的公用成员和保护成员在派生类中的访问属性相当于派生类中的私有成员,即派生类的成员函数能访问它们,而在派生类外不能访问它们.私有基类的私有成员在派生类中成为不可访问的成员,只有基类的成员函数可以引用它们.一个基类成员在基类中的访问属性和在派生类中

  • Android编程中读写私有文件的方法

    本文实例讲述了Android编程中读写私有文件的方法.分享给大家供大家参考,具体如下: 所谓私有文件,则是指程序自己能读取,而其它程序没有权限访问的文件,此文件保存在Data.app.程序包.file目录下面. 其中写文件的方法比较简单: private void writeFile(String fileName, String info) { try { FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE); byte[

  • python中私有函数调用方法解密

    本文实例讲述了python中私有函数调用方法.分享给大家供大家参考,具体如下: 与大多数语言一样,Python 也有私有的概念: ① 私有函数不可以从它们的模块外面被调用 ② 私有类方法不能够从它们的类外面被调用 ③ 私有属性不能够从它们的类外面被访问 与大多数的语言不同,一个 Python 函数,方法,或属性是私有还是公有,完全取决于它的名字. 如果一个 Python 函数,类方法,或属性的名字以两个下划线开始(但不是结束),它是私有的:其它所有的都是公有的. Python 没有类方法 保护

  • C++ 中私有继承的作用

    C++ 中私有继承的作用 私有继承的 第一个规则:和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象转换成基类对象. 第二个规则: 从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员. 私有继承的含义:私有继承意味着 "用...来实现". 如果使类D私有继承于类B,这样做是因为你想利用类B中已经存在的某些代码,而不是因为类型B的对象和类型D的对象之间有什么概念上的关系. 因而,私有继承纯粹是一种实现技术. 私有继承意味着只是继承实

  • 举例讲解Python面相对象编程中对象的属性与类的方法

    python 对象的属性 进入正题,来看一个实例来了解python中类,对象中公有属性,私有属性及局部变量,全局变量的区别. root@10.1.6.200:~# cat object.py #!/usr/bin/env python #coding:utf8 class Dave(): var1 = "class atribute,public atrribute var1" #类属性,公有属性var1 __var2 = "class self atribute __var

  • 深入讲解C#编程中嵌套类型和匿名类型的定义与使用

    嵌套类型 在类或结构内部定义的类型称为嵌套类型.例如: class Container { class Nested { Nested() { } } } 不管外部类型是类还是结构,嵌套类型均默认为 private,但是可以设置为 public.protected internal.protected.internal 或 private.在上面的示例中,Nested 对外部类型是不可访问的,但可以设置为 public,如下所示: class Container { public class N

  • Objective-C编程中语句和变量的一些编写规范建议

    语句 条件语句 条件语句体应该总被大括号包围.只有一行代码最好也加上,否则会带来安全隐患. 复制代码 代码如下: // 推荐 if (!error) {     return success; } // 不推荐 if (!error)     return success; if (!error) return success; 尤达表达式(Yoda) 不要使用尤达表达式.(名字起源于星球大战中尤达大师的讲话方式,总是用倒装的语序) 复制代码 代码如下: // 推荐 if ([myValue i

随机推荐