cuốn sách gpt4 ai đã làm

c++ - 设计模式 : inheritance and encapsulated inheritance

In lại Tác giả: Walker 123 更新时间:2023-11-28 02:08:43 28 4
mua khóa gpt4 Nike

我在准确表述它时遇到问题,所以我在标题中留下了更笼统的描述(如果您对问题有更准确的描述,请发表评论,我会编辑标题)。

câu hỏi: AudioStreamVideoStream 两个类派生自基类MediaStream,它有一些共同的音频和视频流方法,但是不打算按原样使用。因此,有两个类 AudioStreamSettingsVideoStreamSettings 派生自 MediaStreamSettings 并传递给它们相应流类的构造函数。 MediaStreamSettings 存储音频和视频的通用设置,基类 MediaStream 访问此数据。问题是:在流的基类和设置之间设计这种层次关系的最佳方式是什么?

我能想到一个像下面这样的快速解决方案:

class MediaStream {
công cộng:
MediaStream(const MediaStreamSettings& settings){
// do nothing, let derived classes initialize settings_
// note: I feel guilty for doing this...
}
virtual ~MediaStream(){}
được bảo vệ:
std::shared_ptr settings_;
};

class VideoStream : public MediaStream {
công cộng:
VideoStream(const VideoStreamSettings& settings):
MediaStream(settings)
{
settings_ = std::make_shared(settings);
}

void doSomething(){
int s1 = std::dynamic_pointer_cast(settings_)->getVideoStreamSetting1();
...
}
};

class AudioStream : public MediaStream {
công cộng:
AudioStream(const AudioStreamSettings& settings):
MediaStream(settings)
{
settings_ = std::make_shared(settings);
}
}

总而言之,我对这种方法中的两点感到不满意:

  1. 未在基类中初始化settings_(我应该将其抽象化以使自己冷静下来吗?)
  2. 每次我需要访问派生类中的设置时都使用dynamic_pointer_cast(我应该为此制作一个方法包装器吗?)

câu trả lời hay nhất

一种解决方案是不在 MediaStream 中存储数据并添加一个虚拟方法

virtual const MediaStreamSettings& GetMediaStreamSettings() const = 0;

关于c++ - 设计模式 : inheritance and encapsulated inheritance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36510946/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress