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

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数据
}
复制代码
posted @   哟吼--小文文公主  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示