首页 > 编程语言 >【C++入门】(九)使用继承拓展类

【C++入门】(九)使用继承拓展类

时间:2022-10-21 10:44:34浏览次数:48  
标签:入门 基类 Dog 拓展 public C++ Animal 派生类 class

1. 什么是继承?

  1. 基类(class Animal)可以有多个派生类(class Dog :public Animal)

class Animal  //基类
{
public:
    string name = "123";
    int age;
};
​
class Dog :public Animal  //派生类
{
​
};
​
int main()
{  
    Dog a;
    cout << a.name;  //123
}

 

  1. 连续派生时(如果 Dog 由 Mammal 派生而来,而 Mammal 又是由 Animal 派生的),派生类将继承其所有基类的函数和数据

  2. 派生类可以改公有的基类函数为私有,此后派生都将保持私有

 

2. 如何从一个类派生出另一个?

  1. 创建派生类的对象时,将按顺序调用多个构造函数

  2. 创建派生类对象(Dog dog1)时:先调用基类(Animal)构造函数,再调用派生类自己的(Dog)构造函数

    销毁派生类对象(Dog dog1)时:先调用派生类自己的(Dog)析构函数,再调用基类(Animal)析构函数

class Animal  //基类
{
public:
    Animal() { cout << "Animal基类的构造函数" << endl; };
    ~Animal() { cout << "Animal基类的~析构函数" << endl; };
};
​
​
class Dog :public Animal   //派生类
{
public:
    Dog() { cout << "Dog派生类的构造函数" << endl; };
    ~Dog() { cout << "Dog派生类的~析构函数" << endl; };
};
​
​
int main()
{  
    Dog dog1;
//Animal基类的构造函数
//Dog派生类的构造函数
  
//Dog派生类的~析构函数
//Animal基类的~析构函数
}

 

3. 如何在派生类中访问基类的成员函数?

class Mammal
{
public:
    void Move() {cout << "Move()" << endl;}
    void Move(int a) { cout << "Move()" << a << endl; }
};
​
class Dog :public Mammal
{
public:
    void Move() { cout << "Dog Move()" << endl; }
};
​
int main()
{
    Mammal M1;
    Dog d1;
    M1.Move(3);
​
    //子类调用父类的成员函数
    d1.Mammal::Move(6);
  
    return 0;
}

 

4. 如何重写基类的成员函数

  1. 重写函数时,函数名、参数列表、返回类型必须和基类成员函数一致

class Mammal  //基类
{
public:
    Mammal() { cout << "Mammal()" << endl; }
    ~Mammal() { cout << "~Mammal()" << endl; }
​
    void speak()const { cout << "speak()" << endl; }
};
​
class Dog :public Mammal  //派生类
{
public:
    Dog() { cout << "Dog()" << endl; }
    ~Dog() { cout << "~Dog()" << endl; }
​
  //子类重写了父类的成员函数speak(),隐藏了基类的同名函数
    void speak()const { cout << "Dog speak()" << endl; }
};
​
int main()
{
    Mammal M1;  //Mammal()
    Dog d1;     //Mammal()  Dog()
​
    M1.speak();  //speak()
    d1.speak();  //Dog speak()
​
    return 0;  //~Dog()  ~Mammal()  ~Mammal()
}

  1. 重载和重写

    术语相似,重载是创建多个同名但不同的函数;重写是在派生类中修改基类函数

   

5. 什么是受保护访问,如何使用它?

 

访问权限

访问publicprotectedprivate
同一个类
派生类  
外部的类    

 

class Animal  //基类
{
protected:
    int b1 = 10;
    int b2 = 20;
​
public:
    int a_test = b1 + b2;
};
​
class Dog :public Animal {};   //派生类
​
int main()
{  
    Dog dog1;
    cout << dog1.a_test << endl;  //30,派生类(Dog)访问基类(Animal)的 protected数据
}

标签:入门,基类,Dog,拓展,public,C++,Animal,派生类,class
From: https://www.cnblogs.com/ZWJ-zwj/p/16812674.html

相关文章

  • 【C++入门】(七)高级函数
    1.如何重载成员函数?函数重载:编写多个名称相同但参数不同的函数成员函数也可以重载编译器根据参数数量和类型决定调用哪个构造函数classRectangle{public......
  • C++中的四种强制类型转换
    ①static_cast(expression)<type-id>该运算符把expression转换为type_id类型,但没有运行时类型检查来保证转换的安全性,最常用的是基本数据类型之间的转换 ②const_cast......
  • C++面试问题
    如何实现一个不能被继承的类?将其构造函数设置成私有类型 若仍要访问?设置友元类 实现一个可以被继承的类,但不能在外部函数中创建对象的类型?构造函数设置为受保护......
  • Microsoft_Visual_C++_6-0简体中文版
    软件截图​安全认证官方版评价等级⭐️⭐️⭐️⭐️⭐️发布时间2011-10-1719:47:56更新时间2013-07-0219:47:562022-10-2023:24:10软件版本V6.0应用平台Win2003/Wi......
  • AJAX入门
    AJAX入门概念:AJAX:异步的JavaScript和XMLAJAX的作用:与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应数据使用了AJAX和服务器进行通信,就可以使用HTM......
  • C++Primer笔记
    数据类型类型转换当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型所能表示数值的总数取模之后的余数,例如:8bit的unsignedchar可以表示0至255这256个......
  • JSP入门
    JSP入门JSP(全称JavaServerPages)是由SunMicrosystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML、XML或其他格式文档的We......
  • Element快速入门
    Element快速入门概念:Element,一套为开发者、设计师和产品经理准备的基于Vue2.0的组件库,提供了配套设计资源,帮助你的网站快速成型。由饿了么公司前端团队开源。搭建Elem......
  • Go 语言入门很简单:什么是 Golang
    Golang是一种相对较新的编程语言,很快就流行起来。StackOverflow对开发人员进行了民意调查,发现Golang是学习Go编程语言的第三大热门。为了更好地理解为什么Go如此......
  • 在Native C++中调用C#代码
     在关于C++与C#互操作的大多中文文章中,介绍都是在C#中如何使用C++的功能,本文将为大家介绍在C++中如何调用C#的功能。首先,简单介绍一下C#如何使用C++的功能,以作者所......