首页 > 其他分享 >11-9

11-9

时间:2023-11-09 12:00:10浏览次数:43  
标签:11 cout Auto void AbstractFile ele stub

用透明组合模式实现教材中的“文件夹浏览”这个例子

 

#include<iostream>

#include<string>

#include<vector>

using namespace std;

class AbstractFile {

 

public: virtual void add(AbstractFile *ele)=0;

        virtual void remove(AbstractFile *ele)=0;

         virtual void display()=0;

 

};

class TextFile :public AbstractFile{

 

private: string filename;

 

public: TextFile(string f) {

        filename = f;

    }

       void add(AbstractFile *ele) {

        // TODO Auto-generated method stub

        cout<<"添加Text文件"<<endl;

    }

 

        void remove(AbstractFile *ele) {

        // TODO Auto-generated method stub

        cout<<"删除Text文件"<<endl;

    }

        void display() {

        // TODO Auto-generated method stub

        cout<<"展示Text文件"<< filename<<endl;

    }

 

};

class ImageFile :public AbstractFile{

 

private: string filename;

 

public: ImageFile(string f) {

    filename = f;

}

        void add(AbstractFile *ele) {

            // TODO Auto-generated method stub

            cout << "添加Image文件" << endl;

        }

 

        void remove(AbstractFile *ele) {

            // TODO Auto-generated method stub

            cout << "删除Image文件" << endl;

        }

        void display() {

            // TODO Auto-generated method stub

            cout << "展示Image文件" << filename << endl;

        }

 

};

class VideoFile :public AbstractFile{

 

private: string filename;

 

public: VideoFile(string f) {

    filename = f;

}

        void add(AbstractFile *ele) {

            // TODO Auto-generated method stub

            cout << "添加Video文件" << endl;

        }

 

        void remove(AbstractFile *ele) {

            // TODO Auto-generated method stub

            cout << "删除Video文件" << endl;

        }

        void display() {

            // TODO Auto-generated method stub

            cout << "展示Video文件" << filename << endl;

        }

 

};

class Folder:public AbstractFile{

 

private: string filename;

private:vector<AbstractFile* > va;

 

public: Folder(string f) {

        filename = f;

    }

        void add(AbstractFile *ele) {

        // TODO Auto-generated method stub

        va.push_back(ele);

        cout<<"Folder add"<<endl;

    }

     void remove(AbstractFile *ele) {

        // TODO Auto-generated method stub

         vector<AbstractFile* >::iterator it;

         it = find(va.begin(), va.end(), ele);

         for (it != va.end();;){

             va.erase(it);

         }

        cout<<"Folder remove"<<endl;

    }

        void display() {

        // TODO Auto-generated method stub

        for (vector<AbstractFile*>::const_iterator iter = va.begin(); iter != va.cend(); iter++) {

            (*iter)->display();

            }

        cout<<"Folder:display"<<endl;

 

    }

 

};

int main(){

    AbstractFile *obj1, *obj2, *obj3, *obj4, *obj5;

    Folder *plate1, *plate2, *plate3;

    obj1 = new ImageFile("aaa.png");

    obj2 = new TextFile("bbb.txt");

    plate1 = new Folder("ccc");

    plate1->add(obj1);

    plate1->add(obj2);

 

    obj3 = new VideoFile("ddd.mp3");

    obj4 = new VideoFile("eee.mp3");

    plate2 = new Folder("fff");

    plate2->add(obj3);

    plate2->add(obj4);

 

    obj5 = new ImageFile("ggg.jpg");

    plate3 = new Folder("hhh");

    plate3->add(plate1);

    plate3->add(plate2);

    plate3->add(obj5);

 

    plate3->display();

 

}

标签:11,cout,Auto,void,AbstractFile,ele,stub
From: https://www.cnblogs.com/YFLZ/p/17819405.html

相关文章

  • 11月9月字体的属性2以及div模块的另一种用法
    目录字体的属性2文字对齐文字的装饰首行缩进文字的距离设置块级标签的另一个作用字体的属性2文字对齐、文字装饰、首行缩进、文字之间的距离文字对齐需要用到属性text-align,该属性是用于规定元素中的文本水平对齐方式。然后就是text-align的属性值:值描述left左边......
  • 11.9算法
    题目二叉树的锯齿形层次遍历给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入......
  • 大道至简读书笔记11月
    《大道至简》第二章是一次意义深远的思想探索,它进一步深化了我们对大道至简哲学的理解。本章主要讨论了行动与实践在大道至简中的重要性,给予了我许多启示和思考。首先,作者强调了行动的力量。我们不能仅仅停留在思考和理论层面,而是要将思想转化为行动,用实践去验证真理。只有通过实......
  • 2023.11.6测试
    \[\text{NOIP模拟赛-2023.11.6}\]T1视频监控简单题,写复杂了#include<bits/stdc++.h>#defineLLlonglongusingnamespacestd;boolMbe;constintN=1e5+10;introw,col,n,ansr,cntr,ansc,cntc;intb[N<<1],rev[N<<1],tr[N<<1],sumr[N<<1],......
  • 2023.11.8测试
    \[\text{NOIP模拟赛-2023.11.8}\]T1日本题一\(n\timesm\)的网格,从\((1,1)\)移到\((n,m)\)网格间有两种连边(无向边):一类边\((i,j)\rightarrow(i+1,j)\);二类边\((i,j)\rightarrow(i,j+1)\)。所有边的代价都是\(1\),但初始时二类边均不能通过网络中有\(k\)个节点可以......
  • 11-桶排序
    11.桶排序桶排序不是基于比较的排序,利用一个容器来进行存储额外信息进而提升速度(O(n))11.1计数排序​ 看数的范围,建立一个数组,然后记录每个数出现的次数,再按照次数来进行建立数组1.题目​ 有n个公司员工,年龄在16到200之间,用O(n)的复杂度来进行排序。2.思路​ 哈希数组:new[2......
  • 11.8
    11.8关系操作符与逻辑操作符关系操作符用于比较的表达式,称为“关系表达式”,其中的运算符就称为“关系运算符”。>:大于<:小于>=:大于等于<=:小于等于==:相等(区别于=赋值运算符)!=:不相等关系表达式返回为0或1,表示真假运算符不能连用i<j<k对上面的代码,判......
  • P11 从句
    英语从句之所以对咱们很多人造成困扰,主要是因为咱们的中文虽然有和英语从句对应的表达,但是往往在语句结构上很不一样。比如形容词从句的构成方式可以说在中文里根本不存在,但是在学校里,很多老师一上来就直接开始讲各种不同的从句,就好像从句这个概念是显而易见,毋庸赘述,和我们的中文......
  • 第11章-集合操作1
    C#中的一维数组引用类型--数组:一组类型相同的有序数据。 数组可以是一维的,也可以是多维或不规则的数组。 如何声明一维数组?声明数组的方法:  c#  //数据类型【】数组名; int[]arr1;  c语言 //数据类型 数组名【】;intarr1[];在C#中声明数组: 数据类型......
  • 2023年11月8日模拟赛
    这里观看体验更佳总结今天是模拟赛。还是比较难的。但是暴力能拿到210pts。说什么好呢。好像也没有什么好说的。感觉似乎还是那样。今天hyb生病了。可怜,希望他快点好起来。以前总是能在这个地方水一些东西,现在不想水了乎哉。题解今天的题思维和代码能力各需参半。看起来这......