C++:继承

在C++中,继承是一种面向对象编程的核心概念,它是一种机制,允许一个类(称为子类或派生类)从另一个类(称为父类或基类)中继承属性和行为,子类派生类可以重用父类或基类的代码,并且可以添加新的功能或修改现有功能。继承通过创建类之间的层次结构来组织和重用代码。

C++中的继承使用关键字class后跟一个冒号:,然后是要继承的类的名称。格式如下:

class BaseClass {
public:
    // Base class members and methods
};
​
class DerivedClass : public BaseClass {
public:
    // Derived class members and methods
};
 

在继承中,子类会继承父类的成员(字段和方法),这些成员在子类中可以直接使用,就好像它们是子类自己的一样。子类可以通过扩展或修改继承来自父类的成员,或者添加新的成员和方法。这使得在应用中可以轻松地建立层次化的类结构。

  1. 基类(Base Class):也称为父类或超类,是继承关系中位于上层的类。基类定义了一个或多个子类(派生类)所共有的属性和方法。基类的对象通常是更抽象或更泛化的概念,而不是具体的实例。

  2. 派生类(Derived Class):也称为子类或继承类,是继承关系中位于下层的类。派生类通过继承基类的属性和方法来扩展或特化基类的功能。它可以添加新的属性和方法,也可以重写基类的方法。

接着,让我们通过一个简单的动物类例子来演示继承。

//父类
class Animal
{
public:
    Animal(){
        std::cout << "Animal 构造函数" << std::endl;
    }
    ~Animal(){
        std::cout << "Animal 析构函数" << std::endl;
    }
​
    int m_nAge;
    void eat(){
    std::cout << "Eat 函数" << std::endl;
    }
    
    void run();
};
​
//子类
class Cat : public Animal
{
public:
    Cat(){
        std::cout << "Cat 构造函数" << std::endl;
    }
    ~Cat(){
        std::cout << "Cat 析构函数" << std::endl;
    }
    char * szName = nullptr;
private:
​
};

这段代码是一个简单的 C++ 类的示例,其中有一个父类 Animal 和一个子类 Cat

父类 Animal
  • Animal 类有一个默认构造函数 Animal() 和默认析构函数 ~Animal()

  • 它有一个公有的整型成员变量 m_nAge,表示动物的年龄。

  • eat()run() 是公有成员函数,表示动物的吃和跑的行为。

子类 Cat
  • Cat 类继承自 Animal,使用 : public Animal 指定了继承关系。

  • 它有一个默认构造函数 Cat() 和默认析构函数 ~Cat()

  • 它有一个私有成员变量 szName,表示猫的名字。这个变量是一个指向字符的指针,并被初始化为 nullptr,即空指针。

这种继承方式使得 Cat 类具有 Animal 类的所有行为和属性,并且可以根据需要添加自己的特定行为和属性。

这个时候我们在主程序中new一个Cat类的对象,执行任意成员方法,接着销毁该对象的地址空间查看结果:

int main() {
    Cat * catObjA = new Cat;
    
    catObjA->eat();//执行成员
    
    delete catObjA;
    system("pause");
    return 0;
}

由该结果可得到,子类在进行构造析构的时候不仅会调用自身的构造、析构函数还会隐式调用父类的构造和析构函数,且子类也拥有父类中的公共成员

如果这个时候我将父类中的成员方法eat转变为私有成员或者保护成员那么这个时候子类对象就无法进行直接地调用了;

class Animal
{
public:
    Animal();
    ~Animal();
​
    int m_nAge;
    void run();
​
private:
    void eat();
​
private:
};

此时程序直接爆红:

这就涉及到C++的三种权限继承。这三种权限我们留着下篇文章再来分析。

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值