首页 > 其他分享 >神奇的继承

神奇的继承

时间:2023-04-21 19:04:08浏览次数:26  
标签:继承 子类 成员 公有 访问 父类 神奇


1、什么是继承?

客观事物之间普遍存在层次分类关系。处于上层的事物较抽象,表达的是共性的特征;而处在下层的事物较为具体,除了共性特征外,还具有自身所专有的一些特征。例如,人都有姓名、性别、出生日期等属性和工作生活等行为,这是共性的;个性方面,人按职业又可逐层分为很多类,在每一类中,除了具有上层的特征以外,还具有自己的特征。在面向对象编程思想中,采用继承的方法去刻画这种上下层关系。

2、继承的基本语法

class Person//先创建一个 Person类作为父类
{
public:
	int age;
	string name;
	void fun()
	{
		cout << "吃饭!" << endl;
	}
};
//创建doctor类做为子类,在继承Person类时方法如下:
class doctor :public Person
{
public:
	void fun()
	{
		cout <<age<<endl<<name<< "医生看病!" << endl;
	}
};
class teacher :public Person
{
	//age = 30;
	//name = "Tom";
public:
	void fun()
	{
		cout <<name<<endl<<age<<endl<< "教书育人!" << endl;
	}
};
void test01()
{
	doctor p1;
	teacher p2;
	p1.age = 40; p1.name = "Tom";
	p2.age = 30; p2.name = "Lisa";
	p1.fun();
	p2.fun();
}

虽然没有在子类中设置age和name的成员属性, 但是子类可以从父类中继承这些成员属性,就不需要再重新敲写一遍代码了。由此可见,通过继承的方式可以减少我们书写大量重复的代码。另外值得注意的是在继承的基本语法中,冒号“:”和父类名中间有一个访问权限符public。这正是三种继承方式之一。

神奇的继承_子类

3、三种继承方式

在父类中可能会有三种访问权限的成员,那么在使用不同的继承方式是会产生不同的效果。

神奇的继承_子类_02

1、public 公有继承

如图上图所示,公有继承时,子类不可访问父类中的私有成员,父类中的共有成员在子类中依然是公有成员,父类中的保护成员在子类中依然是保护成员。

神奇的继承_公有成员_03

很明显,编译器允许我们访问m_A和m_B,但并不允许我们访问私有成员m_C。

神奇的继承_子类_04

很明显,在类外编译器只允许我们访问m_A,说明m_A是公有成员,m_B是保护成员。

2、protected 保护继承

如上图所示,保护继承时,子类也不允许访问父类中的私有成员,父类中的公有成员和保护成员在子类中都是保护成员。

神奇的继承_公有成员_05

很明显,在类外当我们访问m_A时编译器会报错,总是m_A在父类中是公有成员,经过保护继承以后,公有成员在子类中就会变成保护成员。

3、私有继承

理解前两种继承方式,第三种就见文知意了。子类允许访问父类中的私有成员,父类中的所有成员,无论是哪种访问权限,子类私有继承之后,都会变成私有成员。

标签:继承,子类,成员,公有,访问,父类,神奇
From: https://blog.51cto.com/u_16083087/6213940

相关文章

  • 类的memory以及抽象类继承学习(含测试代码)
    #include<iostream>#include<cstdio>#include<queue>#include<vector>#definelllonglongusingnamespacestd;/*注意:输出不同可能对齐参数或者编译器不同有关。*///模板类输出方法template<classT>intsize(Tlim){returnsizeof(lim);}/*......
  • 一篇文章带你搞懂Python中的继承和多态
    今日鸡汤岩溜喷空晴似雨,林萝碍日夏多寒。一、继承的介绍继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。继承的特点就是子类可以使用父类的属性(特征、技能)。继承是类与类之间的关系。继承可以减少代码冗余、提高重用性。在现实生活中,继承一般指的是子女继承父......
  • 内部类的继承
    publicclassOutputInnerClassextendsClassA.ClassB{//继承内部类bpublicOutputInnerClass(ClassAa){a.super();}}classClassA{classClassB{}} 在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引......
  • Java继承与多态
    基本概念被继承的类称为基类或父类或超类,而新的类被称为派生类或子类。一般把基类和派生类实例的集合称作类继承层次结构。Java中的类只支持单一继承(即一个类只有一个父类)。在需要多重继承的场合,可以使用接口机制来实现。 子类会自动继承父类中的非private成员(是否继承静态......
  • Django基础 - 06Model模型的关联关系及对象继承
     一、 一对一关系:实名认证表一对一关系: models.OneToOneField主表的数据是相对重要的(UserEntity), 从表需要主动声明关系(RealProfile)对象获取: 从表获取主表数据, 直接使用字段, 对象.字段名.属性名; 主表获取从表数据: 隐性的, 对象.模型名.属性名1.1 声明一对一......
  • C++中的继承
    #include<iostream>classA{public:std::stringhead;voidhello(std::stringstr){std::cout<<str<<head<<std::endl;}};intmain(){Aa;std::stringstr="hello";a.head......
  • Java中的继承
    先看一段代码:classA{publicintx;}classB{publicvoidpri(){System.out.println(x);}}请问这时候调用x,可以得到值么?答案是否定的,因为x在A这个类当中,而这个A类和B类毫不相干,B类中没有x这个变量,所有代码会出现编译错误,但是通过继承,就可以访问的到A类里的x。......
  • 类的继承12
    #include<iostream>usingnamespacestd; classDog{public:    voidsetdata()    {        cin>>name>>age>>sex>>weight;    }    voidGetName()    {        cout<<"它的名字叫"<<name<<......
  • 类的继承11
    #include<iostream>usingnamespacestd;classTime{ friendostream&operator<<(ostream&cout,Time&t); friendistream&operator>>(istream&cin,Time&t);public: Time(inth=0,intm=0,ints=0) { m_H=h; m_......
  • java——maven——分模块——模块继承
    通过父工程,管理所有子模块的依赖版本管理    把所有依赖放入dependentmanagement下面        所有的子工程需要修改,引入父工程,然后子工程里面的引入依赖的版本号全部去除,交由父工程统一管理:       插件依赖,也可以进行版本统一管理:......