首页 > 编程语言 >使用c++装饰器模式完成 QQ秀这个游戏,给动画人物搭配不同服饰。

使用c++装饰器模式完成 QQ秀这个游戏,给动画人物搭配不同服饰。

时间:2024-04-02 19:59:55浏览次数:41  
标签:QQ name Finery show c++ Person 动画人物 per public

// 比如穿T恤,衬衫,外套,皮鞋,运动鞋,靴子...,根据下面的类图完
//被装饰的类
class Person
{
public:
    string m_name;
    Person() {}; //子类实例化需要无参构造
    Person(string name) :m_name(name) {}
    virtual void show() { cout << m_name; };
};
//装饰器父类 抽象类
class Finery:public Person
{
protected:
    Person* m_per;
public:
    Finery(Person* p) :m_per(p) {}; //这里使用person类无参构造  先父类无参 再子类构造
    //Finery(Person name, Person* perman) :Person(name), m_per(perman) {}
    virtual void show() =0;
};
//具体装饰类
class LongTrouser :public Finery

public:
    LongTrouser(Person* p):Finery(p) {}; //显示构造父类
    void show() { 
        //调用原来的showf方法
        m_per->show();
        //装饰
        cout << "长袜" << endl; 
    }
};
class Tshiirts :public Finery

标签:QQ,name,Finery,show,c++,Person,动画人物,per,public
From: https://blog.csdn.net/m0_67469586/article/details/137287034

相关文章

  • 使用c++观察者模式完成主题订阅 消息通知
    //造主题,主题是默认的新闻主页,主题下面还有具体的频道:经济、体育、娱乐。这样主题也分为两个层,观察者可以订阅新闻主页,也可以订阅具体的频道。//观察者模式//抽象类观察者classAbsObserver{public:   virtualvoidupdate(stringcontent)=0;//更新的接口};......
  • 代码随想录算法训练营DAY14|C++二叉树Part.1|二叉树的递归遍历、二叉树的迭代遍历、二
    文章目录二叉树的递归遍历思路CPP代码二叉树的迭代遍历思路前序遍历后序遍历后序遍历二叉树的统一迭代法二叉树的递归遍历144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历文章讲解:二叉树的递归遍历视频讲解:每次写递归都要靠直觉?这次带你学......
  • C++虚继承原理与类布局分析
    C++虚继承原理与类布局分析引言在开始深入了解虚继承之前,我们先要明白C++引入虚继承的目的。C++有别于其他OOP语言最明显的特性就是类的多继承,而菱形继承结构则是多继承中最令人头疼的情况。我们都知道,当派生类继承基类时,派生类内部会保存一份基类数据的副本。在D->B|C,B|C->A......
  • 【C++算法】 卡常技巧
    文章目录updata学习引言技巧1——善用修饰符技巧2——输入输出`read`和`write`技巧3——对于运算的优化技巧4——展开循环技巧5——对与循环的优化updata2024.03.31发布此文章学习引言卡常,一种编程技巧,在对时间复杂度要求很高时,就可以用这种办法来节省时......
  • c++蛮力法解释
    蛮力法(bruteforce)是一种基本的问题求解策略,也被称为穷举法。它的基本思想是通过穷举所有可能的解来寻找问题的解决方案。在C++中,可以使用循环和条件判断语句来实现蛮力法。下面是一个示例,假设要解决的问题是找到数组中两个数的和等于给定目标值的情况:#include<iostream>#i......
  • 在VS或者CLion中引入C和C++的SDK
    visualstudio创建c++项目引入头文件和库文件拷贝的gpt的,可以用在VisualStudio2022中,虽然你创建的是一个C++项目,但它确实支持C语言的编译和运行。为了在你的项目中使用C语言的头文件和库文件,你可以按照以下步骤操作:1.**添加头文件和库文件到项目:**-首先,你......
  • C++ std常用math函数
    std::atan和std::atan2std::atan(x)  即tan(angle)=x  所求angle范围[-PI/2,PI/2] [-90°,90°]std::atan2(y,x)即tan(angle)=y/x 所求angle范围[-PI,PI][-180°,180°]  std::fmod(x,y)计算x/y的浮点余数,如std::fmod(3.1,2)=1.1对浮点数进行......
  • test c++
    testc++ #include<iostream>usingnamespacestd;intmain(){charmyChar[6]={'H','e','l','l','o','\0'};//char*pointer=myChar;//WORKS!!!char*pointer......
  • c++变量、常量
    ///变量声明(规定变量类型和名字)与定义(为变量开辟内存空间)///变量可声明多次,但只能被定义一次///变量名一般以小写开头,类名以大写开头intj=10;//初始化,创建时赋予初始值;有初始化机制,但最好手动初始化j=22;//赋值,将变量当前值替换为新的值inti;//声明[i],但非定义;i=10;......
  • C++ List 到 Python List 的转换
    当我们编写C++库的封装器通常涉及使用一种跨语言的接口技术,比如使用C接口或者使用特定的跨语言库,比如SWIG(SimplifiedWrapperandInterfaceGenerator)或者Pybind11。这里我将简要介绍如何使用Pybind11来封装一个C++库,以便在Python中使用。1、问题背景在编写C++库的......