C++音乐播放器类设计

终于还是毕业了!
学了接近两年半Golang语言,直到找工作才发现,新兴语言刚出社会要找一份工作真的不容易,终于明白学校开的课程总是比社会的需求慢上几个节拍了!还是学回C++吧!
首先声明,本人也只是C++初学者,对于C++的使用也仅限于大学一年级写过学生管理系统(从最原始的书本示例版本、到以文件形式持久化信息版本、到UI(用了点Qt皮毛,早忘了QAQ)版本、到数据库版本)、控制台贪吃蛇、控制台WIFI管理器等若干练手项目!
此次音乐播放器是时隔两年后再次学习C++,如果有考虑不周的情况,烦请斧正!先谢谢了!
废话不多说!

本文的音乐播放器目前只是类的设计,并不涉及具体的音频解码!

说一下我的类设计思路:
音乐播放器首先要有音乐类,音乐类应该有音乐名称,类型等属性,然后音乐又应该有播放,暂停等方法!但是音乐只是一个统称,得要有具体的音乐格式,如MP3、WAV等才能真正播放,所以将播放设计为纯虚函数,也就是说音乐类是不能实例化的(音乐类实例化没有实际意义)!

class Music
{
    public:
        Music(std::string name, int type) 
            : name(name),type(type){};
        virtual void play() = 0;
        void stop();
        std::string get_name() { return name; };

    protected:
        std::string name;
        int type;
};

定义好了音乐的共性,接下来就可以定义特定的音乐了,如MP3音乐。MP3应该继承自Music类,拥有名字,类型等属性,所有在Music类中将名字,类型设置为protected属性。MP3音乐需要重写play才能实现真正播放!

class MP3Music : public Music
{
    public:
        MP3Music(std::string name, int type = MP3);
        void play();

    private:
};

如果还需要添加别的具体音乐类别,只需要再添加类,我认为这样设计拓展性挺好!

播放器类的设计。播放器类需要增删改查等功能,随需要添加!这里只设计了几个简单的功能。由于前面把Music类设计为抽象类,然后派生出各种具体的音乐类型。有个好处是可以直接传Music类指针,如播放直接设计为

void play(Music *m);    //播放音乐

而不用

void play(MP3Music *m)
void play(WAVMusic *m)

我觉得这才是面向对象的精髓所在!后面的写法我认为纯粹就是用面向对象的语言写面向过程。

class Player
{
    public:
        Player();
        void add(Music *m);     //添加音乐到列表          
        void play(Music *m);    //播放音乐
        void stop(Music *m);    //暂停正在播放的音乐
        void list();            //查看音乐列表

    private:
        static std::vector music_list; //用于存放音乐列表
};

对于music_list设计为static,我的想法是音乐列表应该只有一份,仅属于音乐播放器本身,不属于任何一个对象,不应该在每一个对象中都存在一份拷贝。

以上就是我的全部设计想法,可能设计的不是很好!如果有设计的不好的地方,或者考虑欠缺,希望能指点一二!谢谢!

代码放到了github上:
C++音乐播放器
后面如果有更好的想法,可能会不定时更新!

你可能感兴趣的:(C/C++,c++,音乐播放器)