父类中的成员在子类中的继承方式,一般也包含三种:public公有继承、private私有继承、protedted受保护继承。
public公有继承: 父类的公有成员和受保护成员在子类中保持原有的访问属性,其私有成员仍为父类私有,在子类中是访问不了的,即使通过子类的共有成员函数也访问不了;private私有继承: 父类的公有成员和受保护的成员在子类中变成了私有成员,其私有成员仍为父类私有, 在子类中是访问不了的,即使通过子类的共有成员函数也访问不了;protected受保护继承: 父类的公有成员和受保护的成员 在子类中变成了受保护成员,其私有成员仍为父类私有, 在子类中是访问不了的,即使通过子类的共有成员函数也访问不了;简而言之:不同的继承方式直接改变公有成员和受保护的成员在子类中的性质,对于私有成员是不会造成影响,子类没有办法访问父类的私有成员。
在父类中创建公有函数访问私有函数,在子类中创建公有函数访问父类公有函数
#include <iostream> #include <string> using namespace std; class CStudent { public: char *p_name; char sex; int num; int age; static int master; CStudent(){}; CStudent(char* pname, char t_sex, int t_num, int t_age) :sex(t_sex), num(t_num), age(t_age) { p_name = NULL; int n_len = 0; if (pname) { n_len = strlen(pname); } if (n_len > 0) { p_name = new char[n_len + 1]; memset(p_name, 0, n_len + 1); strcpy(p_name, pname); } } CStudent(const CStudent& stud) { int n_len = 0; n_len = strlen(stud.p_name); p_name = new char[n_len + 1]; memset(p_name, 0, n_len + 1); strcpy(p_name, stud.p_name); num = stud.num; age = stud.age; sex = stud.sex; } CStudent& operator=(const CStudent& stud) { int n_len = 0; n_len = strlen(stud.p_name); p_name = new char[n_len + 1]; memset(p_name, 0, n_len + 1); strcpy(p_name, stud.p_name); num = stud.num; age = stud.age; sex = stud.sex; return *this; } bool operator==(const CStudent& stud) { int n_len = 0; n_len = strlen(stud.p_name); if ((num == stud.num) && (age == stud.age) && (sex == stud.sex) && (*p_name == *stud.p_name)) { for (int i = 0; i < n_len;i++) { if (*(p_name+i )!= *(stud.p_name+i)) { return false; } } return true; } else { return false; } } ~CStudent(); }; CStudent::~CStudent() { if (p_name) { delete[] p_name; p_name = NULL; } } int CStudent::master = 0; class CXiaoStudent : public CStudent { public: int yuwen_score; int shuxue_score; int english_score; private: int flag_private; protected: int flag_protected; public: int get_flag_1() { return flag_private; //return flag_protected; } }; class CZhongStudent : public CXiaoStudent { public: int wuli_score; int huaxue_score; public: int get_flag_1() { //return flag_private; return CXiaoStudent::get_flag_1(); } }; void test() { CZhongStudent zhangshan; cout << zhangshan.get_flag_1() << endl; } int main(int argc, char* argv[]) { test(); system("pause"); return 0; }