您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页C++面向对象特性之继承

C++面向对象特性之继承

来源:二三娱乐

一、继承的概念

       继承是一种机制,目的是实现代码复用的同时减少重复代码量。它允许程序员在保持原有类特性的基础上进行功能的拓展。这样产生的新类叫做派生类,被继承的类叫做基类

下面可以看一个实例:

class Animal {
	int age;
};
class Cat :public Animal {
	string name;
};

首先创建了一个Animal类,之后创建了一个Cat类。Cat类用public的方式继承了Animal类中所有特性。

再举一个例子,某公司创建一个职工管理系统。一个职工就是一个类的对象所有职工都有姓名、编号等属性。但是不同部门的职工可能有其它部门没有的特性。这时可以把公共属性封装为基类,然后创建含有特性且继承了基类的派生类。 

二、继承的语法

1、继承的代码格式

class 派生类名:继承方式{类成员}

2、继承方式

一共有三种,分别是public、protected、private

基类成员被派生类继承后访问权限的变化
基类中public成员基类中protected成员基类中private成员
public继承publicprotectedprivate
protected继承protectedprotectedprivate
private继承privateprivateprivate

1、基类中的private继承权限的属性,无论以何种方式继承,在派生类中都是不可见的(依然被继承到了派生类当中,但是无论类内类外都无法访问)。

2、如果想让一个基类中的成员被继承后可以类内访问,不可以类外访问,那么这个成员访问权限应该设为protected,并且继承方式设置为public或protected

3、对于private继承方式,继承到的public、protected权限的成员都会成为private权限,只能类内访问

4、使用class时默认访问权限和默认继承方式都是private,使用struct则是public

三、基类与派生类

1、基类与派生类之间相互赋值

#include<iostream>

using namespace std;

class Animal {
public:
	int age=3;
	string sex="雄";
};
class Cat :public Animal {
public:
	string m_name = "小白";
};
int main() {
	Animal a;
	Cat b;
	a = b;
	b = a;
	system("pause");
	return 0;
}

这里赋值有一个切片原则,派生类的成员一般比基类多,所以将派生类赋值给基类时,忽略掉多出部分。基类赋值给派生类时,由于成员少,传给派生类的成员少,所以会报错。

简单总结就是:派生类可以赋值给基类,基类不可以赋值给派生类。

具体赋值时,可以通过:

1、=符号赋值

Animal a;
Cat b;
a=b;

2、通过引用赋值

Cat a;
Animal &b=a;

3、通过指针赋值

Cat a;
Animal*b=&a;

2、同名的成员变量

       有时候基类和派生类中定义有同名的成员变量,此时编译器以派生类优先,如果想访问基类中的同名的成员变量,应该表明作用域,用:基类名::成员变量访问。

3、同名的成员函数

       基类和派生类中定义有同名的成员函数,构成函数的隐藏。即隐藏基类中的同名函数,默认为派生类中的成员函数。如果想 调用基类中的成员函数,应表明作用域。基类名::成员函数(参数)访问。

       成员函数的隐藏,只需要同名就可构成,对参数表没有要求

四、子类中的默认成员函数

1、构造函数:

派生类继承了基类,创建一个派生类对象时,相当于创建一个基类对象与派生类的特性。创建时,默认先调用基类的构造函数,再调用派生类的构造函数。

所以,务必保证基类的构造有效。如果基类构造失效,必须在派生类构造函数中为基类部分初始化。

基类构造失效,是指基类中的成员没有全部被初始化。(一般而言,如果基类构造函数没有默认参数给基类成员初始化,那么一般都要在子类构造函数中初始化基类部分)

2、析构函数:

与构造函数相反,一个派生类对象被析构时,先调用派生类自己的析构函数,再调用基类的析构函数。

所以,不要在派生类中调用基类的析构函数。如果调用了,那么基类会被析构两次。

3、拷贝构造:

派生类中调用基类的拷贝构造函数时,直接传入子类对象即可(切片原则)。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务