类的继承学习记录

简介: 类的继承学习记录

三种类继承方式的不同


1.公有继承:


基类 派生类
公有成员 公有成员
保护成员 保护成员
私有成员 不可访问


2.私有继承:


基类 派生类
公有成员 私有成员
保护成员 私有成员
私有成员 不可访问


3.保护继承:


基类 派生类
公有成员 保护成员
保护成员 保护成员
私有成员 不可访问


私有继承和保护继承的不同在于连续继承时私有继承两次后成员不可访问,但保护继承根据连续继承方式不同访问权限不同;


继承小实例:


问题1:


定义一个document类,有数据成员name,派生出book类,增加数据成员pageCount。


代码


#include<bits/stdc++.h>
using namespace std;
class Document{//基类
  public:
    string name;
    Document(){}//默认无参构造函数
    Document(string name)
    {
      this->name=name;
    }//带参构造函数
    void Showname(){
      cout<<name<<endl;
    }//输出文件名称
};
class Book : public Document{//派生类Book 公有继承 Document
  public:
    Book(){}//默认构造函数
    Book(int pageCount,string name) : Document(name) {
      this->pageCount=pageCount;
    }//带参构造函数
    void Showinformation()
    {
      cout<<pageCount<<endl;
      Showname();
    }//输出信息
  private:
    int pageCount;
};
int main()
{
  Book a(1212,"AAA");
  a.Showinformation();
  return 0;
}


问题2


定义一个哺乳动物类Mammal,再由此派生出狗类Dog,定义一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序;

构造函数的调用顺序是先基类后派生类,析构函数的调用顺序是先派生类与基类,与构造函数顺序相反


代码


#include<bits/stdc++.h>
using namespace std;
class Mammal{
  public:
    int age;
    Mammal(int age=0)
    {
      this->age=age;
      cout<<"setMammal"<<endl;
    }
    ~Mammal()
    {
      cout<<"delMammal"<<endl;
    }
};
class Dog : public Mammal
{
  public:
    string colour;
    Dog(int age,string colour) : Mammal(age)
    {
      this->colour=colour;
      cout<<"setdog"<<endl;
    }
    ~Dog()
    {
      cout<<"deldog"<<endl;
    }
};
int main()
{
  Dog A(6,"red");
}


e486a27fa3f537e8177f1f875fd15056_b6ea2ff8ada64d3e95ee83065b7eb694.png


反思与总结:


1.初学尽量用公有继承,比较方便

2.每一个类的默认构造函数与带参构造函数都要有,要给全

3.带参构造函数不要给初始值,不然会报错,原因暂时不明,等知道了再来补上。

4.派生类的带参构造函数要调用基类的带参构造函数给基类赋值,写在派生类的参数表里,有多个用逗号间隔,不写在大括号里


目录
相关文章
|
3天前
|
Java C++
继承杂谈。
继承杂谈。
18 0
|
3天前
|
Java 编译器 C++
【C++】 | 类和对象完结篇
【C++】 | 类和对象完结篇
|
3天前
|
C++
C++零基础教程(类的继承)
C++零基础教程(类的继承)
45 0
|
9月前
|
存储 安全 编译器
【巧妙继承】C++玩转继承的神级技巧
【巧妙继承】C++玩转继承的神级技巧
|
10月前
|
C++
自考学习C++ 继承与派生
自考学习C++ 继承与派生
|
11月前
|
Java 编译器 C++
【类和对象完结篇】
【类和对象完结篇】
|
12月前
|
存储 编译器 C++
【C++】类和对象(完结篇)
【C++】类和对象(完结篇)
51 0
|
编译器 C++
爱上c++的第六天(核心课程):继承和多态
学习c++的人一定知道的就是c++是面向对象设计的,而面对对象的三大特性就是封装,继承和多态,我们在刚开始学习的时候就已经学过封装了,今天我们主要来学习一下多态和继承。
43 0
|
程序员 C++
黑马程序员C++类和对象【6】—— 继承(一文万字带你搞懂C++继承 —— 你还不知道怎么学C++继承吗?不知道虚继承底层原理吗?)(2)
黑马程序员C++类和对象【6】—— 继承(一文万字带你搞懂C++继承 —— 你还不知道怎么学C++继承吗?不知道虚继承底层原理吗?)(2)
黑马程序员C++类和对象【6】—— 继承(一文万字带你搞懂C++继承 —— 你还不知道怎么学C++继承吗?不知道虚继承底层原理吗?)(2)
|
程序员 编译器 C++
黑马程序员C++类和对象【6】—— 继承(一文万字带你搞懂C++继承 —— 你还不知道怎么学C++继承吗?不知道虚继承底层原理吗?)(1)
黑马程序员C++类和对象【6】—— 继承(一文万字带你搞懂C++继承 —— 你还不知道怎么学C++继承吗?不知道虚继承底层原理吗?)(1)
146 0
黑马程序员C++类和对象【6】—— 继承(一文万字带你搞懂C++继承 —— 你还不知道怎么学C++继承吗?不知道虚继承底层原理吗?)(1)