C++音乐播放器类设计

阅读: 评论:0

C++音乐播放器类设计

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 *> music_list; //用于存放音乐列表
};

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

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

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

本文发布于:2024-02-04 20:44:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170716006559443.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:播放器   音乐
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23