• 5.组合与继承


    1.面向对象

            在C++中,面向对象(Object-Oriented)是一种程序设计范式,它使用“对象”来设计应用程序和软件。面向对象编程(OOP)的核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态性(Polymorphism)。

    1. 类(Class):类是对某一类对象的抽象描述,它定义了对象的属性和方法。属性通常表现为类的数据成员,而方法则是类的成员函数。

    2. 对象(Object):对象是类的实例。每个对象都有它自己的属性(即类的数据成员的值)和方法(即类的成员函数)。

    3. 封装(Encapsulation):封装是隐藏对象的属性和实现细节,仅对外提供公共接口。这有助于保护数据不被外部直接访问和修改,并且使得代码更易于维护和理解。

    4. 继承(Inheritance):继承允许一个类(派生类)继承另一个类(基类)的属性和方法。这使得代码重用成为可能,并有助于构建层次化的类结构。

    5. 多态性(Polymorphism):多态性意味着一个接口可以有多种实现方式。在C++中,这通常通过虚函数和继承实现。多态性允许我们编写更加通用和灵活的代码。

    2.组合

            在C++中,组合(Composition)是一种面向对象设计原则,指的是一个类的对象包含其他类的对象作为其数据成员。通过组合,一个类可以重用其他类的功能,并将其纳入自己的实现中。这种关系是一种“有”的关系,即一个对象“有”另一个对象作为其一部分。

            组合是面向对象编程中代码重用和封装的重要手段之一。通过组合,你可以创建更复杂的对象,这些对象由更简单的对象组成,从而实现了功能的层次化和模块化。

     

     

    1. #include
    2. class ARR{
    3. public:
    4. ARR():tail(0){}
    5. void addtail(int data);
    6. void show(void);//
    7. private:
    8. int data[100];
    9. int tail;
    10. };
    11. void ARR::addtail(int data){
    12. this->data[tail++] = data;
    13. }
    14. void ARR::show(void){
    15. int i = 0;
    16. for(;i
    17. printf("%d, ", data[i]);
    18. printf("\n");
    19. }
    20. class Stume{
    21. public:
    22. Stume(){}
    23. ~Stume(){}
    24. void savescore(int score) {
    25. scorearr.addtail(score);
    26. }
    27. void showscore(void){
    28. scorearr.show();
    29. }
    30. private:
    31. ARR scorearr;
    32. };
    33. int main() {
    34. Stume mmm;
    35. mmm.savescore(1);
    36. mmm.savescore(2);
    37. mmm.savescore(3);
    38. mmm.showscore();
    39. return 0;
    40. }

     

    3.继承(基类、派生类)

     举例:

    1. #include
    2. #include
    3. using namespace std;
    4. class ARR{
    5. public:
    6. ARR() {}
    7. ~ARR(){}
    8. void show(void){
    9. cout << "XXXXXXXXXXX" << endl;
    10. }
    11. };
    12. int main() {
    13. ARR a;
    14. a.show();
    15. return 0;
    16. }

     

    1. #include <stdio.h>
    2. #include <iostream>
    3. using namespace std;
    4. class A{
    5. public:
    6. A() {}
    7. ~A(){}
    8. void showx(void){
    9. cout << "XXXXXXXXXXX" << endl;
    10. }
    11. };
    12. /* AX类是A类的升级版,(这种也叫派生,同时也叫继承)
    13. * A为AX的基类
    14. * AX为A的派生
    15. * AX具有A的全部功能,并且添加了新的功能
    16. */
    17. class AX:public A{
    18. public:
    19. void showy(void){
    20. cout << "YYYYYYYYYYYY" << endl;
    21. }
    22. };
    23. int main() {
    24. A a;
    25. a.showx();
    26. AX b;
    27. b.showx();
    28. b.showy();
    29. return 0;
    30. }

  • 相关阅读:
    音频——解析 PCM 数据
    迅为RK3588开发板Android12双摄同时显示
    谷歌浏览器Chrome 100即将发布,但可能无法正常使用?
    C++Builder:定时器Timer控件
    【Leetcode】动态规划-647. 回文子串
    Java中的线程安全与线程同步
    RocketMQ 学习教程——(二)SpringBoot 集成 RocketMQ
    stream流
    一文讲清Java中的四种引用类型的区别(关于弱引用是如何解决ThreadLocal内存泄漏问题)
    儿童家居服 I 童年很短,请尽情打扮吧
  • 原文地址:https://blog.csdn.net/weixin_51310062/article/details/138097938