首页 > 编程语言 >C++类的组合和类的继承的区别

C++类的组合和类的继承的区别

时间:2024-08-01 20:09:50浏览次数:7  
标签:Engine 组合 继承 Car C++ Animal 基类 public 构造函数

C++类的组合和类的继承的区别

类的组合:

类的组合是一种将一个类的对象作为另一个类的成员变量的设计方式。

class Engine {
public:
    Engine() { /* ... */ }
    ~Engine() { /* ... */ }
};

class Car {
private:
    Engine engine; // Engine的构造函数和析构函数将被调用
public:
    Car() {
        // Engine的构造函数在此处被调用
    }
    ~Car() {
        // 当Car对象销毁时,Engine的析构函数首先被调用
    }
};

类的继承:

类的继承的子类是派生类,可以拥有父类的全部属性。

#include <iostream>
#include <string>

// 基类:Animal
class Animal {
protected:
    std::string name;

public:
    // 基类的构造函数
    Animal(const std::string& animalName) : name(animalName) {}

    // 基类的虚析构函数
    virtual ~Animal() {
        std::cout << name << " is being destroyed." << std::endl;
    }

    // 一个简单的打印信息的成员函数
    virtual void speak() const {
        std::cout << name << " makes a sound." << std::endl;
    }
};

// 子类:Dog,继承自 Animal
class Dog : public Animal {
private:
    std::string breed;

public:
    // Dog类的构造函数
    Dog(const std::string& dogName, const std::string& dogBreed)
        : Animal(dogName), breed(dogBreed) {}

    // 重写基类的 speak 函数
    void speak() const override {
        std::cout << name << " barks." << std::endl;
    }

    // Dog类特有的成员函数
    void showBreed() const {
        std::cout << name << " is a " << breed << "." << std::endl;
    }
};

int main() {
    Dog myDog("Buddy", "Golden Retriever");

    // 访问Dog类特有的函数
    myDog.showBreed();

    // 访问从Animal类继承来的speak函数
    myDog.speak();

    return 0;
}

标签:Engine,组合,继承,Car,C++,Animal,基类,public,构造函数
From: https://www.cnblogs.com/zcx0326/p/18337385

相关文章

  • C++深拷贝和浅拷贝的区别
    C++深拷贝和浅拷贝的区别#include<iostream>#include<cstring>usingnamespacestd;classstudent{public:student(constchar*name,intage);//声明构造函数~student();//析构函数//如果没有定义拷贝构造函数,编译器就自动生成默认拷贝构造函数:浅拷贝......
  • 行李托运问题(c++实际问题专题1)
    大家好,小编今天给大家带来一个问题,这个问题出题方法也比较实用。先看一下题干: 这道题目其实分一下货物的类型就行了,<=10的算一类,>10的算一类,这样在分别算出就行,先算<=10的:if(n<=10)cout<<fixed<<setprecision(2)<<2.5;//注意,这里需要用fixed-setpresicion函数......
  • C++ STL adjacent_difference 用法
    一:功能    计算相邻两个元素的差(默认),也可以使用其他自定义运算函数,比如计算相邻两个元素的和。二:用法#include<iostream>#include<vector>#include<numeric>intmain(){std::vector<int>data{2,3,5,7,11,13};//前两个参数指定输入的范围,第......
  • C++-入门(下)
    一、前言:目标:1.C++关键字2.命名空间3.C++输入&输出4.缺省参数5.函数重载6.引用7.内联函数8.auto关键字(C++11)9.基于范围的for循环(C++11)10.指针空值---nullptr(C++11)二、目标的实现:6.引用:6.1引用概念:        引用不是新定义一......
  • C++ - 左值和右值的区别
    示例:来看一行简单的代码1inta=10;这行代码,"="左边就是左值,"="右边的则为右值,那他们到底有什么不同呢?如果是Java、PHP等后端同学,会称以左边的"a"为变量,右边的"10"为字面量,而到了C++这里,我们就需要对他理解更多一点。这行代码运行起来,是在系统内存中申......
  • 【C++】多态
    什么是多态?就是不同对象在完成某个行为时,会产生不同的形态多态分为静态多态和动态多态静态多态在编译期间就确定执行哪个函数,主要包含:函数重载和运算符重载静态多态函数的地址早绑定-在编译阶段确定函数的地址动态多态派生类和虚函数实现的运行阶段的多态动态多态函数......
  • 组合数学学习笔记(二)(2024.7.4)
    一、鸽巢原理1.鸽巢原理将\((\sum\limits_{i=1}^n{p_i})-n+1\)放入\(n\)个盒子,一定存在一个盒子\(i\),使得第\(i\)个盒子至少装了\(p_i\)个物品。练习一有十个数\(a_1,a_2\dotsa_{10}\)满足\(\forall_{1\leqi\leq10}{1\leqa_i\leq60}\),证明能够从\(a_i\)中挑......
  • 【C++】1.C++入门(1)
    文章目录1.C++关键字2.命名空间2.1命名空间定义2.2命名空间使用3.C++输入&输出4.缺省参数4.1缺省参数概念4.2缺省参数分类5.函数重载5.1函数重载概念5.2C++支持函数重载的原理--名字修饰(nameMangling)1.C++关键字C++总计63个关键字,C语言32个关键字2.......
  • 深入探讨C++编译期多态:提高效率与安全性
    目录一、引言二、编译期多态技术详解函数重载(FunctionOverloading)运算符重载(OperatorOverloading)模板元编程(TemplateMetaprogramming)使用std::enable_if实现条件模板特化使用ifconstexpr实现编译期条件分支SFINAE(SubstitutionFailureIsNotAnError)CRTP(Curious......
  • 基于Django的超市小程序+47822(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小
    基于django超市小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市小程序被用户普遍使用,为方便用户能够可以随时进行超市小程序的数据信息管理,特开发了基于djan......