Base.h
#ifndef _BASE_H_
#define _BASE_H_
namespace cplusplustest{
class Base
{
public:
Base() {}
virtual ~Base() {};
public:
void publicFunc();
public:
void setPrivateMem(int i);
int getPrivateMem();
protected:
void protectedFunc();
private:
void privateFunc();
public:
int m_publicMem;
protected:
int m_protectedMem;
private:
int m_privateMem;
};
}
#endif
Base.cpp
#include "Base.h"
#include <iostream>
using namespace std;
namespace cplusplustest
{
void Base::publicFunc()
{
cout << "publicFunc in base" << endl;
}
void Base::protectedFunc()
{
cout << "protectedFunc in base" << endl;
}
void Base::privateFunc()
{
cout << "privateFunc is base" << endl;
}
void Base::setPrivateMem(int i)
{
m_privateMem = i;
}
int Base::getPrivateMem()
{
return m_privateMem;
}
}
ChildOne.h
#ifndef _CHILDONE_H_
#define _CHILDONE_H_
#include "Base.h"
namespace cplusplustest
{
class ChildOne : public Base
{
public:
ChildOne() {};
ChildOne(Base& base);
virtual ~ChildOne() {}
public:
void childOnePublicFunc();
private:
void childOnePrivateFunc();
private:
int m_childOnePrivateMem;
};
}
#endif
ChildOne.cpp
#include "ChildOne.h"
#include <iostream>
using namespace std;
namespace cplusplustest
{
ChildOne::ChildOne(Base& base)
{
base.m_publicMem = 10;
//base.m_protectedMem = 11; //ChildOne中不能访问Base的protected成员变量
//base.m_privateMem = 12; //ChildOne中不能访问Base的private成员变量
this->m_publicMem = 100;
this->m_protectedMem = 101; //ChildOne继承了Base的protected成员变量,可以访问自己的protected成员变量
//this->m_privateMem = 102; //ChildOne没有继承Base的pritvate成员变量(或者说继承了Base的private成员变量,但是是Base private的,不能访问)
this->m_childOnePrivateMem = 1000;
}
void ChildOne::childOnePublicFunc()
{
cout << __FUNCTION__ << endl;
this->publicFunc();
this->protectedFunc(); //ChildOne 继承了Base的protected成员函数
//this->privateFunc(); //ChildOne没有继承Base的private 成员函数
cout << endl;
}
void ChildOne::childOnePrivateFunc()
{
cout << "childOnePrivateFunc in childOne" << endl;
}
}
TestMain.cpp
#include "Base.h"
#include "ChildOne.h"
#include <iostream>
using namespace std;
using namespace cplusplustest;
void main()
{
Base base;
base.publicFunc();
//base.protectedFunc(); //Base的protected 成员函数, 在类之外不可访问
//base.privateFunc(); //Base的private 成员函数, 在类之外不可访问
ChildOne childOne;
childOne.publicFunc();
//childOne.protectedFunc(); //ChildOne继承的Base的protected成员函数, 在类之外不可访问
//childOne.privateFunc(); //ChildOne不会继承Base的private成员函数,在类外更不可访问
childOne.childOnePublicFunc();
//childOne.childOnePrivateFunc(); //ChildOne的private成员函数在类之外不可访问
ChildOne childOneOther(base);
ChildOne childOneTwo;
childOneTwo.setPrivateMem(10); // ChildOne继承了Base的private变量(可以调试看一下childOneTwo的变量栈),不能访问,只能通过Base来访问
cout << childOneTwo.getPrivateMem() << endl;
cout << "done" << endl;
system("pause");
}