当前位置: 首页 > news >正文

景德镇建设企业网站电商网站建设建站方案

景德镇建设企业网站,电商网站建设建站方案,设计干货很多的网站,wordpress 主页插件目录 派生类的生成过程 派生类的构造函数与析构函数: 构造函数: 派生类组合类的构造和析构: 构造函数和析构函数调用顺序: 派生类的生成过程 三步骤: 吸收基类(父类)成员:实现代…

目录

派生类的生成过程

派生类的构造函数与析构函数:

构造函数:

派生类+组合类的构造和析构:

构造函数和析构函数调用顺序:


派生类的生成过程

三步骤:

吸收基类(父类)成员:实现代码重用;

派生类继承了基类除了构造函数、析构函数以外的所有成员函数。

改造基类(父类)成员:改变原基类成员的访问控制权限、同名覆盖原基类的成员;

同名覆盖:在派生类中定义一个与基类同名的成员,派生类的成员将基类原成员隐藏;

对原基类被覆盖成员的访问方式:

//访问被覆盖的A类成员:A::show();

新增派生类(子类)成员:对源代码进行扩充。

以派生类的实际需求新增加数据成员和成员函数,以增强派生类的功能

 

 

派生类的构造函数与析构函数:

因为派生类无法继承基类的构造函数与析构函数,且派生类成员由继承的基类成员、派生类新增成员共同构成,我们需自行完成构造函数实现对继承成员及新增成员的初始化、析构函数释放成员。

构造函数:

我们可以通过基类构造函数,初始化继承的基类成员

构造函数格式:

派生类名:: 派生类名(  参数列表  ):基类名(初始化列表),新成员(参数) 
{};

eg:

//继承与派生的生成过程
#include <iostream>
#include <string>
using namespace std; class A //基类
{
public:A(int i) :a(i) { cout << "A 的构造函数" << endl; };A() :a() { cout << "A 的默认!构造函数" << endl; };~A() { cout << "A 的析构函数" << endl; };void show(){cout << "a=" << a<<endl;}
private:int a;
};class B :public A
{
public:B(int j) :b(j) { cout << "B 的构造函数" << endl; }//等同与://B(int j):A(),b(j)//{cout << "A 的构造函数" << endl; }B(int i, int j) :A(i), b(j) { cout << "B 的构造函数" << endl; }//同名覆盖:void show(){//访问基类原被覆盖成员:A::show();cout << "b=" << b << endl;}~ B() { cout << "B 的析构函数" << endl; }
private :int b;//新增加成员
};
int main()
{A a{9};a.show();B b{7,8};b.show();return 0;
}

注意:

  • 基类的构造函数必须在初始化列表内完成
    • 进入构造函数大括号内说明构造函数的功能已经实现,而基类未初始化
  • 基类如有默认构造函数时,可以省略不写
    • 该构造函数初始化,自动跳转默认构造函数

输出:

总结:派生类的构造:先调用基类构造函数、再调用派生类的构造函数,析构函数则与派生顺序相反(形成对称)

析构函数:

~类名();无差别,特殊情况区别处理;

派生类+组合类的构造和析构:

派生类:继承所得类

组合类:新增加的成员对象是另一个类的对象

//继承与派生的生成过程
//这是配置好的模板文件
#include <iostream>
#include <string>
using namespace std; class X 
{
public:X(int x) :c(x){cout << "X(int x)构造函数" << endl;}~X(){cout << "~X()析构函数" << endl;}void show(){cout << "c=" << c << endl;}
private:int c;
};
class A //基类
{
public:A(int i) :a(i) { cout << "A 的构造函数" << endl; };A() :a() { cout << "A 的默认!构造函数" << endl; };~A() { cout << "A 的析构函数" << endl; };void show(){cout << "a=" << a<<endl;}
private:int a;
};

派生类:


class B :public A
{
public:B(int i, int x) : b(i), c(x){cout << "B 的构造函数" << endl;}//等同与://B(int j,int x):A(),b(j),c(x)//{cout << "A 的构造函数" << endl; }B(int i,int j,int x):A(i),b(j),c(x){ cout << "B 的构造函数" << endl; }//同名覆盖:void show(){//访问基类原被覆盖成员:A::show();cout << "b=" << b << endl;c.show();}~ B() { cout << "B 的析构函数" << endl; }
private :int b;//新增加成员X  c;  //新增组合类的成员
};
int main()
{/*A a{9};a.show();*/B b{7,8,9};b.show();return 0;
}

输出:

构造函数和析构函数调用顺序:

派生类构造函数执行顺序一般是:

基类(父类)、组合类、派生类

具体如下:

(1)先调用基类的构造函数

(2)然后按照数据成员的声明顺序,依次调用数据成员的构造函数或初始化数据成员;

(3)最后执行派生类构造函数的函数体。

注意:构造函数的执行顺序只与成员声明的顺序有关,而与初始化表中各项的排列顺序无关。

 

注意:派生类析构函数执行时将自动调用基类、组合类成员对象的析构函数

析构函数执行顺序:

派生类、组合类、基类

析构函数与构造函数顺序相反,形成对称

http://www.yayakq.cn/news/314964/

相关文章:

  • 哈尔滨建站的系统陕西高速公路建设集团网站
  • 交通运输局网站建设方案巩义公司做网站
  • 做网站 上海小说网站建设的支柱
  • 网站备案取消流程wordpress 制作小工具
  • 重庆电子商务网站seo中国邮政做特产得网站
  • 电子商务网站建设作业案例wordpress免费自适应主题
  • 医疗网站建设 中企动力做网站要先买域名吗
  • 学校网站建设管理相关规定长沙seo排名扣费
  • 微信h5游戏网站建设统计局网站建设情况
  • 设计公司英文北京移动端网站优化
  • w98免费服务器sem优化专员
  • 安阳网站建设优化广州建设企业网站公司
  • 云南省工程建设交易系统网站知名网站建设在哪里
  • 三明网站建设tudouly南昌信息推广平台
  • 淮北建站实训课建设网站步骤
  • php做的网站怎么加密怎么把搜到自己的网站
  • 辽宁建设工程信息网查询截图seozou是什么意思
  • 惠州做网站建设价格做设计的网站商家入驻
  • 威联通如何做网站网站的建设时间
  • 网站设计的论文龙岩律师在线咨询
  • 兰州做网站es5188淘宝现在不能发布网站建设
  • php网站开发实例pdfwordpress系统
  • 网站开发课程设计wordpress微信图文采集
  • 网站制作+app+公众号百度指数怎么分析
  • 设计开发建设网站wordpress 备份数据库
  • 网站个别页面做seo新媒体网络营销的概念
  • 阿里云虚拟主机做企业网站石家庄网站建设加q.479185700
  • 上海建设工程造价信息网站潮州移动网站建设
  • 如何加强高校网站建设织梦网站模版下载
  • 西安网站建设推荐q479185700上墙东旭网站建设