C++ 类的继承一(访问控制)

//类的继承
#include<iostream>
using namespace std;

/*
面向对象中的继承类之间的父子关系
1.子类拥有父类所有的成员属性和成员函数(包括私有成员变量)
2.子类就是一种特殊的父类
3.子类对象可以当作父类对象使用
4.子类可以拥有父类没有的方法和属性

c++中的类成员访问级别(public,protected,private)

类成员访问级别设置原则
1.需要被外界访问的成员直接设置为public
2.只能在当前类中访问的成员设置为private
3.只能在当前类和子类中访问的成员设置为protected,protected的成员访问权限介于public和private之间

判断类成员变量访问权限三步骤
1.看调用语句写在子类的内部还是外部
2.看子类如何从父类继承(public,protected,private)
3.看父类中的访问级别(public,protected,private)

*/

class A{
public:
    int a;
protected:
    int b;
private:
    int c;
};

class B:public A
{
public:
    void Test1(){
        a = 10;//父类的公有成员可以在子类内部访问
        b = 20;//父类的保护成员可以在子类内部访问
        //c = 20;  报错: 父类的私有成员在子类内部无法访问
    }
};
class Bt :public B
{
public:
    void Test12(){
        a = 10;//可以访问B类中的a属性--说明a属性的访问级别至少是public或者protected
        b = 20;//可以访问B类中的b属性--说明a属性的访问级别至少是public或者protected
        //c = 20;  报错:  父类的私有成员在子类内部无法访问
    }
};

void Protect1(){
    B b1;
    b1.a = 11;//父类的公有成员可以在子类外部访问
    //证明:public继承父类,父类的公有成员会变成子类的公有成员
    //b1.b = 21;  报错  说明:public继承父类,父类的保护成员会变成子类的保护成员
}

class C :protected A{
    void Test1(){
        a = 10;//父类的公有成员可以在子类内部访问
        b = 20;//父类的保护成员可以在子类内部访问
        //c = 20;  报错: 父类的私有成员在子类内部无法访问
    }
};

class Ct :public C{
    void Test12(){
        a = 10;//可以访问C类中的a属性--说明a属性的访问级别至少是public或者protected
        b = 20;//可以访问C类中的b属性--说明a属性的访问级别至少是public或者protected
        //c = 20;  报错:  父类的私有成员在子类内部无法访问
    }
};

void Protect2(){
    C c1;
    //c1.a = 10;  报错 :error C2247 : “A::a”不可访问,因为“C”使用“protected”从“A”继承
    //说明 protected继承父类,父类的公有成员会变为子类的保护成员
    //c1.b = 21;  报错  error C2248 : “A::b” : 无法访问 protected 成员(在“A”类中声明)
    //说明 protected继承父类,父类的保护成员会变为子类的保护成员
}

class D :private A{
    void Test1(){
        a = 10;//父类的公有成员可以在子类内部访问
        b = 20;//父类的保护成员可以在子类内部访问
        //c = 20;  报错: 父类的私有成员在子类内部无法访问
    }
};

class Dt :public D{
    void Test12(){
        //a = 10;   报错  error C2247 : “A::a”不可访问,因为“D”使用“private”从“A”继承
        //D中的成员变量无法被其子类访问,说明a成员属性是D的私有成员属性
        //b = 20;   报错  error C2248 : “A::b” : 无法访问 无法访问的 成员(在“A”类中声明)
        //D中的成员变量无法被其子类访问,说明b成员属性是b的私有成员属性
        //说明:private继承父类,父类中的公有成员变量会变成子类的私有成员变量,父类的保护成员变量会变成子类的私有成员变量
    }
};

void main(){
    system("pause");
}

/*
c++的继承方式(public,private,protected)会影响子类对外的访问属性
public继承:父类成员在子类中保持原有的访问级别
--即父类的公有成员变成子类的公有成员,父类的保护成员成为子类的保护成员,父类的私有成员被子类继承,但是不是子类的私有成员
private继承:父类成员在子类中变为private成员
--即父类的公有成员变成子类的私有成员,父类的保护成员成为子类的私有成员,父类的私有成员被子类继承,但是不是子类的私有成员
protected继承:父类中public成员变成protected
--即父类的公有成员变成子类的保护成员,父类的保护成员成为子类的保护成员,父类的私有成员被子类继承,但是不是子类的私有成员

总结:不同的继承方式可能改变继承成员的访问属性
*/
时间: 2024-10-11 06:54:20

C++ 类的继承一(访问控制)的相关文章

Java——类的继承、访问控制

[继承] <1>Java只支持单继承,不支持多继承. <2>继承父类的私有成员变量,只有所有权,没有使用权. [继承中的构造方法] 程序: 运行结果: A() B() B:f() [访问控制] 注:default又被称为包权限.

J2SE之面向对象_重载_this_static_package_import_继承_访问控制

方法的重载 构造方法重载 对象的创建和使用 class Point { private double x; private double y; Point(double x1, double y1) { x = x1; y = y1; } public double getX() { return x; } public double getY() { return y; } public void setX(double i) { x = i; } public void setY(doubl

【C/C++】继承与访问控制

常见问题 Q1. 类child从类parent公有派生,则类child可以访问类parent中的哪些成员? A. public成员 B. private成员 C. protected成员 D. 数据成员 Q2. 类child从类parent公有派生,若有"child c;",那么c可以访问类parent中的哪些成员? A. public成员 B. private成员 C. protected成员 D. 都不能访问 Q3. 类child从类parent私有派生,则类child可以访问类p

对象的继承、访问控制

对象的继承(拥有部分相同的属性和方法) 继承的好处: 1.父类里面定义的类成员可以不用在子类中重复定义,节约了编程的时间 人是一个父类 男人类 女人类 2.同一个父类的子类拥有相同的父类定义的类成员,因此外部代码调用他们的时候一视同仁 3.子类可以修改和调整父类定义的类成员(称之为重写),一单子类修改了,就按照子类修改后的功能执行 用extends关键字来表示类的继承,后面跟父类的类名,后面只能跟一个类,这叫php单继承原则 在子类的对象上可以直接访问父类中定义的方法和属性,父类中的属性可以通过

C++ 类的继承

在C++中,可重用性是通过继承这一机制来实现的,因此,继承是C++中一个重要的部分. 1.派生类的声明 声明一个派生类的一般格式为: class 派生类名:继承方式  基类名 {     //派生类新增的数据成员和成员函数 }; 从已有类派生出新类时,可以在派生类内完成以下功能: (1)可以增加新的数据成员 (2)可以增加新的成员函数 (3)可以对基类的成员进行重定义 (4)可以改变基类成员在派生类中的访问属性 2.基类成员在派生类中的访问属性 从基类继承来的成员在派生类中的访问属性是由继承方式

14 PHP 类的继承 [public protected private] parent 构造方法 析构方法 重写 最终类和方法 设计模式

类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生一个新的类,称为派生. 继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情. 父类/子类:已有类为父类,新建类为子类.父类也叫"基类",子类也叫"派生类" 单继承:一个类只能从

Java类的继承与权限控制

1.继承:***是一种****,说明是继承关系 Java中使用extends关键字实现类的继承机制,语法规则: 通过继承,子类拥有基类(superclass/父类)的所有成员(成员变量和成员方法) Java只支持单继承,不允许多继承 一个子类只能有一个基类,一个基类可以派生出多个子类  2.访问控制

【JAVA零基础入门系列】Day13 Java类的继承与多态

继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟方法,被继承的类被称为父类或者基类,继承的类称为子类或者导出类,在子类中可以调用父类的方法和变量.在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类.但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类.这就相当于一个人不能有多个父亲一样(滑稽,老王表示不服). 话不多

PHP 类的继承 访问修饰符 重写

类的继承: 某些类A具有的某些特性,另一个类B,也具有A类的所有特性并且也有自己的特性,此时我们就可以实现B类使用A类的特性信息并继续添加自己的一些特有的特征信息  关键字是:extends基本概念:   继承:一个类从另一个已有的类获得其特性,称为继承   派生:从一个已有的类产生一个新的类,称为派生   也可以理解为:已有类为父类,新建类为子类,父类也叫基类,子类也叫派生类   一个类只能从一个上一级类继承其特性 叫单继承   多继承的话 就是继承他父类的父类 也就是爷爷类访问(权限)修饰符