类class的使用可以更好的实现对数据结构的封装。在c++中,使用了public, private, protected来实现封装。
下面是个简单的例子,class A定义了三个变量分别标识了三种不同的属性。
1.当直接访问A的成员时,只有public成员是可以访问的,另外两个是不能被访问的。
2.但是对于子类来说,protected是可以访问的,但是 private是不能访问的。
3. 不论是public继承还是private继承,子类成员函数对父类成员的访问不因继承类型而改变。
public和protected类型都是可以访问的,而private是不能访问的。
4. public继承和private继承将影响到,通过子类访问父类成员的情况。
public继承时,父类的成员仍然保持了在父类时的属性。
private继承时,父类的成员将不能被访问,即使其在父类中是public的。
5. 第四点同样影响到了子类继承时的表现。
下面例子中,class E的成员函数能像对象b一样访问父类的成员。
而class F的成员也是像对象c一样,不能访问父类的成员。
// =====================================================================================
//
// Filename: class.cpp
//
// Description: investigate the public,private,protected usage
//
// Version: 1.0
// Created: 07/17/2010 01:32:49 AM
// Revision: none
// Compiler: g++
//
// Author: Wizard (), wizarddewhite@gmail.com
// Company:
//
// =====================================================================================
#include <iostream>
using namespace std;
class A
{
public:
int pub_mem;
protected:
int pro_mem;
private:
int pri_mem;
};
class B: public A
{
public:
B()
{
pub_mem = 9;
pro_mem = 9; // allowed! protected
// pri_mem = 9; // not allowed, private
}
};
class C: private A
{
public:
C()
{
pub_mem = 9;
pro_mem = 9; // allowed! protected
// pri_mem = 9; // not allowed, private
}
};
class D: protected A
{
public:
D()
{
pub_mem = 9;
pro_mem = 9;
// pri_mem = 9; // not allowed, private
}
};
class E: public B
{
public:
E()
{
pub_mem = 9;
pro_mem = 9; // allowed! protected
// pri_mem = 9; // not allowed, private
}
};
class F: public C
{
public:
F()
{
// pub_mem = 9; // not allowed,
// pro_mem = 9; // not allowed,
// pri_mem = 9; // not allowed, private
}
};
class G: public D
{
public:
G()
{
pub_mem = 9;
pro_mem = 9;
// pri_mem = 9; // not allowed, private
}
};
int main ( int argc, char *argv[] )
{
A a;
B b;
C c;
D d;
/* A is the base class */
a.pub_mem = 9;
// a.pro_mem = 9;// not allowed, protected
// a.pri_mem = 9;// not allowed, private
/* B is inherited from A, publicly */
b.pub_mem = 9;
// b.pro_mem = 9;// not allowed, protected
// b.pri_mem = 9;// not allowed, private
/* D is inherited from A, protected */
// d.pub_mem = 9; // not allowed,
// d.pro_mem = 9;
// d.pri_mem = 9;
/* C is inherited from A, private */
// c.pub_mem = 9;// not allowed, even this is public, it is iherited with private
// c.pro_mem = 9;// not allowed, protected
// c.pri_mem = 9;// not allowed, private
return 1;
} // ---------- end of function main ----------