继承 总结

继承:在已有类的基础上创建新类的过程
  一个 B 类继承A类,或称从类 A 派生类 B

     类 A 称为基类(父类),类 B 称为派生类(子类)

基类名表  构成

访问控制  基类名1, 访问控制  基类名2 ,… , 访问控制  基类名n

访问控制 表示派生类对基类的继承方式,使用关键字:
  public 公有继承
  private 私有继承

  protected 保护继承

派生类的生成过程经历了三个步骤:
       ●吸收基类成员(全部吸收(构造、析构除外),但不一定可见)
       ●改造基类成员

       ●添加派生类新成员

吸收基类成员 :在C++的继承机制中,派生类吸收基类中除构造函数和析构函数之外的全部成员。 改造基类成员:通过在派生类中定义同名成员(包括成员函数和数据成员)来屏蔽(隐藏)在派生类中不起作用的部分基类成员。添加新成员:仅仅继承基类的成员是不够的,需要在派生类中添加新成员,以保证派生类自身特殊属性和行为的实现。 

重名成员:派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽(hide)了基类的同名成员。在派生类中使用基类的同名成员,显式地使用类名限定符:类名 :: 成员 

派生类中访问静态成员:基类定义的静态成员,将被所有派生类共享(基类和派生类共享基类中的静态成员)根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质 。 派生类中访问静态成员,用以下形式显式说明:类名 :: 成员或通过对象访问 对象名 . 成员

基类的初始化:在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据。派生类构造函数声明为派生类构造函数 ( 变元表 ) : 基类 ( 变元表 ) , 对象成员1( 变元表 )… 对象成员n ( 变元表 ) ; 构造函数执行顺序:基类  对象成员 派生类

派生类构造函数和析构函数的定义规则:派生类构造函数和析构函数的使用原则;基类的构造函数和析构函数不能被继承;如果基类没有定义构造函数或有无参的构造函数, 派生类也可以不用定义构造函数;如果基类无无参的构造函数,派生类必须定义构造函数;如果派生类的基类也是派生类,则每个派生类只负责直接基类的构造;派生类是否定义析构函数与所属的基类无关

派生类构造函数的定义:在C++中,派生类构造函数的一般格式为:
      派生类::派生类名(参数总表):基类名(参数表)
     {
             // 派生类新增成员的初始化语句
     }
     注意:这是基类有构造函数且含有参数时使用
派生类析构函数:(1)当派生类中不含对象成员时
●在创建派生类对象时,构造函数的执行顺序是:基类的构造函数→派生类的构造函数;
●在撤消派生类对象时,析构函数的执行顺序是:派生类的析构函数→基类的析构函数。
(2)当派生类中含有对象成员时
●在定义派生类对象时,构造函数的执行顺序:基类的构造函数→对象成员的构造函数→派生类的构造函数;
●在撤消派生类对象时,析构函数的执行顺序:派生类的析构函数→对象成员的析构函数→基类的析构函数。
例题:定义一个基类person(不定义构造函数)
姓名、性别、年龄(访问权限设置为私有)
定义公有的成员函数set_p()

定义公有的成员函数display_p(),显示person的信息

#include<iostream>

#include <string>
using namespace std;
class Person
{
string name;
int age;
string sex;
public:
void set_p() {
cout<<"name\tage\tsex"<<endl;
cin>>name>>age>>sex;
}
void show_p() {
  cout<<name<<"  "<<age<<"  "<<sex<<endl;
}

};

class student :public Person
{
string no;
string zhuanye;
string t_class;
float score;
public:
void set_t(){
      set_p(); //调用继承于基类的成员函数访问继承于基类的私有数据成员
    cout<<"zhuanye\tt_class\tscore"<<endl;
    cin>>zhuanye>>t_class>>score;
}
void show_t() {
show_p();
cout<<zhuanye<<"  "<<t_class<<"  "<<score<<endl;
}

};

心得:1)继承是面向对象程序设计实现软件重用的重要方法。能够在已有基类的基础上定义新的派生类。 
2) 单继承的派生类仅仅有一个基类。多继承的派生类有多个基类。
3) 派生类对基类成员的訪问由继承方式和成员性质决定。
4) 创建派生类对象时,先调用基类构造函数初始化派生类中的基类成员。调用析构函数的次序和调用构造函数的次序相反。 
5)C++提供虚继承机制,防止类继承关系中成员訪问的二义性。 

     使用三种继承方式时需要注意以下几个方面:1. 基类的private成员在派生类中是不能被访问的,如果基类成员不想在类外直接被访问,但需要 在派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。2. public继承是一个接口继承,保持is-a原则,每个父类可用的成员对子类也可用,因为每个子类 对象也都是一个父类对象。3. protected/private继承是一个实现继承,基类的部分成员并非完全成为子类接口的一部分, 是 has-a 的关系原则,所以非特殊情况下不会使用这两种继承关系,在绝大多数的场景下使用的 都是公有继承。私有继承以为这is-implemented-in-terms-of(是根据……实现的)。通常比 组合(composition)更低级,但当一个派生类需要访问基类保护成员或需要重定义基类的虚函 数时它就是合理的。4. 不管是哪种继承方式,在派生类内部都可以访问基类的公有成员和保护成员,基类的私有成员存 在但是在子类中不可见(不能访问)。  5. 使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。


内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值