欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 继承相关知识

继承相关知识

2025/4/23 8:52:21 来源:https://blog.csdn.net/m0_57188252/article/details/147428183  浏览:    关键词:继承相关知识

概念

定义类时,代码中有共性的成员,还有自己的属性,使用继承可以减少重复的代码,

继承的语法

class 子类:继承方式 父类

继承方式有:public,private,protected

公共继承:父类的公有成员到子类也是公有的,父类的保护成员在子类是受保护的

保护继承:父类中共有的权限内容和保护权限内容,在子类都变为保护权限

私有继承:父类中公有和保护权限内容,在子类都变为私有权限

其中,父类的私有成员,子类不管哪种继承方式都无法访问。

继承中的对象模型

父类中所有的非静态成员属性,子类都会继承,私有成员也会继承,只是私有成员被编译器隐藏了。

继承中构造和析构顺序

#include <iostream>
using namespace std;
class Base
{
public:Base(){cout << "父类构造函数" << endl;}~Base(){cout << "父类析构函数" << endl;}
};
class son :public Base
{
public:son(){cout << "子类构造函数" << endl;}~son(){cout << "子类析构函数" << endl;}
};
int main()
{son s;
}

继承中的构造顺序是,先构造父类,再构造子类,析构则相反,因为创建子类对象的时候,会先创建父类对象,然后继承。

继承同名成员的处理方式

当子类和父类出现同名的成员时,如果需要访问子类,可以直接访问,如果需要访问父类,需要加作用域。

#include <iostream>
using namespace std;
class Base
{
public:int m_a;Base(){m_a = 10;}~Base(){}
};
class son :public Base
{
public:int m_a;son(){m_a = 20;}~son(){}
};
int main()
{son s;cout << s.m_a << endl;//20cout << s.Base::m_a << endl;//10
}

继承中同名成员函数的处理方式

思想和同名成员函数处理方式相同,但需要注意的是,子类的同名函数会隐藏父类中所有的同名函数,解决方法就是加作用域。

#include <iostream>
using namespace std;
class Base
{
public:int m_a;Base(){m_a = 10;}void func(){cout << "父类函数的调用" << endl;}~Base(){}
};
class son :public Base
{
public:int m_a;son(){m_a = 20;}void func(){cout << "子类函数的调用" << endl;}~son(){}
};
int main()
{son s;s.func();//直接调用是子类的函数s.Base::func();//加作用域后就是调用父类的函数
}

继承中同名静态成员的处理方式

静态成员变量的特点是:所有对象共享同一份数据,编译阶段就分配内存,类内声明,类外初始化。

静态成员定义的语法:

static int a;

静态成员函数的特点是:只能访问静态成员变量,不能访问非静态成员变量,也是只有一份,所有对象共享一份函数实例。

静态成员和非静态成员出现同名时,处理方式一致,访问子类直接访问,访问父类需要加上作用域,因为静态成员不属于对象上,因此也可以通过类名直接访问,静态成员属性。

静态成员函数处理方式一致,也可以通过类名方式访问,子类也会隐藏父类同名函数,需要访问被隐藏的父类同名函数,需要加上作用域。

静态成员和非静态成员处理方式是一样的,只是静态成员可以通过对象和类名访问。

多继承

语法:

class 子类:继承方式 父类1,继承方式 父类2......

子类中如果有多个同名成员,需要加作用域区分。(实际开发中很少使用)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词