zoukankan      html  css  js  c++  java
  • C++ 类中的3种访问权限和继承方式

    访问权限:public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问。三种继承方式分别是 public 继承,protect 继承,private 继承。

    示例程序如下:

    #include <iostream>
    #include <String>
    
    using namespace std;
    
    // 基类
    class student
    {
    public:
    	string name;
    protected:
    	int age;
    private:
    	char sex;
    
    public:
    	void showStu()
    	{
    		cout << this->name << endl; // 1、在本类能够访问类的公有数据成员
    		cout << this->age << endl;  // 1、在本类能够访问类的保护数据成员
    		cout << this->sex << endl;  // 1、在本类能够访问类的私有数据成员
    	}
    };
    
    // 派生类 - public继承
    class public_Sub : public student
    {
    public:
    	void show()
    	{
    		cout << this->name << endl; // 2、public继承,在派生类中能够访问基类的公有数据成员
    		cout << this->age << endl;  // 2、public继承,在派生类中能够访问基类的保护数据成员
    		//cout << this->sex << endl;  // error:2、在c类中不能访问基类的私有数据成员
    	}
    };
    
    // 派生类 - protected继承
    class protected_Sub : protected student
    {
    public:
    	void show()
    	{
    		cout << this->name << endl; // 3、protected继承,在派生类中能够访问基类的公有数据成员
    		cout << this->age << endl;  // 3、protected继承,在派生类中能够访问基类的保护数据成员
    		//cout << this->sex << endl;  // error:3、在派生类中不能访问基类的私有数据成员
    	}
    };
    
    // 派生类 - private继承
    class private_Sub : private student
    {
    public:
    	void show()
    	{
    		cout << this->name << endl; // 4、private继承,在派生类中能够访问基类的公有数据成员
    		cout << this->age << endl;  // 4、private继承,在派生类中能够访问基类的保护数据成员 【即使是private继承】
    		//cout << this->sex << endl;  // error:4、在派生类中不能访问基类的私有数据成员
    	}
    };
    
    int main()
    {
    	student stu;
    	cout << stu.name << endl;   // 5、在类外可以访问类的公有数据成员
    	//cout << stu.age << endl;    // error,5、在类外不能访问类的保护数据成员
    	//cout << stu.sex << endl;    // error,5、在类外不能访问类的私有数据成员
    
    	return 0;
    }
    
    • 派生类内不管是 public、protected、private 继承,总是可以 public、protected 成员,基类中的 private 成员永远不能再派生类内直接访问,不论通过哪种方式。
    • 派生类对象仅当 public 派生时,对基类中的 public 成员有可访问/可修改的权限,其他都为不可访问/不可修改。

    另外,继承方式会改变从基类继承的成员在派生类的访问权限:

    1、public 继承不改变基类成员的访问权限;

    2、protected 继承将基类中 public 成员变为子类的 protected 成员,其它成员的访问权限不变;

    3、private 继承使得基类所有成员在子类中的访问权限变为 private。


    C++ 中为什么要定义 public、protect、private 这三种访问权限?

    有些我们需要给外面看的,也就是对外接口,那么就是 public。如果我们不想让别人知道内部的实现细节,那么就是 private。如果我们不想让别人知道,想让自己的孩子什么的知道(这里涉及到继承),那么就可以作为 protected。


  • 相关阅读:
    POJ2253 Frogger
    搜索专题(复习)
    机器学习资料整理
    51nod 1873 初中的算术
    Canny检测理解和Matlab实现
    Floyd+限制路径步数(快速幂优化)
    bitset优化背包问题
    Educational Codeforces Round 44 (Rated for Div. 2)
    BZOJ 3224 SBT 普通平衡树
    本科课程大数据基础
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/11309748.html
Copyright © 2011-2022 走看看