C++音乐播放器类设计
来源:互联网 发布:淘宝网花卉 编辑:程序博客网 时间:2024/05/16 07:50
终于还是毕业了!
学了接近两年半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++音乐播放器
后面如果有更好的想法,可能会不定时更新!
- C++音乐播放器类设计
- 音乐播放器 c语言版
- C实现音乐播放器
- 音乐循环播放器的PCB设计
- Mini音乐播放器_设计一
- 【android】音乐播放器之设计思路
- Android音乐播放器的设计
- QT5简易音乐播放器的设计
- C# 音乐播放器的设计
- 4Qt音乐播放器的设计
- C实现简单音乐播放器
- 音乐播放器 c语言版加强版
- Objective C编写音乐播放器
- C#winfrom播放音乐
- C语言播放音乐
- c语言播放音乐
- android 音乐播放器中播放模式的设计
- android音乐播放器播放音乐卡
- 1Z0-051 35. Which two statements are true regarding constraints? (Choose two.)
- 多路转接-EPOLL 及简单的EPOLL服务器实现
- 『ORACLE』手工建库(11g)
- 根据别名推送通知(完成版)Jcenter自动集成
- RT-Thread的线程(任务)处理
- C++音乐播放器类设计
- Qt在MDI area中新建subwindow时,默认最大最小化及关闭按钮在标题栏左边,怎么移到右边去
- 利用 SRTP 模拟静多态
- 记一次面试编程题
- roseha,nec-ha以及mysql数据库热备思考
- GPX Data——GPX数据
- CJOJ 2171 火车站开饭店
- 如何从头搭建一个搜索引擎_简易的网页框架web.py
- 重启nginx后丢失nginx.pid,如何重新启动nginx