首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >组成你继承的类的对象?

组成你继承的类的对象?
EN

Stack Overflow用户
提问于 2010-02-03 23:06:30
回答 2查看 277关注 0票数 2

我有一个类参数,它的目的是表示某个参数可能包含的值(实现两个关键方法,GetNumValues()和GetValue(int index))。

通常,一个逻辑参数(参数值是位标志)最好由parameter类的两个或多个实例表示(即,参数可以是1或2,参数可以是4或8,而不是一个参数可以是5、6、9或10)。为了处理这个问题,我想创建一个包含参数的CompositeParameter类,并根据它所包含的参数的组合实现GetNumValues()和GetValue()函数。

由于CompositeParameter将参数组合在一起,使它们充当单个参数,因此"CompositeParameter是参数“关系是有意义的。所以我发现自己处在这样的情况下,我有一个类,它由继承的类的对象组成,这看起来是不正确的。但同时,我不明白为什么更高级别的代码不能完全相同地对待CompositeParameters和参数。

我能想到的唯一选择就是让CompositeParameter简单地编写参数,而更高级别的代码将只处理CompositeParameters。然而,这有点浪费b/c一般的情况是CompositeParameters,它只包含一个参数。

有什么想法?

代码语言:javascript
运行
AI代码解释
复制
class Parameter
{
public:
    virtual unsigned int GetNumValues() const {...}
    virtual unsigned int GetValue(unsigned int index) const {...}
}

class CompositeParameter : public Parameter
{
public:
    // product of GetNumValues() of each item in mParamList
    virtual unsigned int GetNumValues() const {...} 

    // allow all the possible combinations of the items in mParamList to be
    // treated as one parameter. i.e. if mNumParams = 2, this would be analogous
    // to getting the row and col index of a matrix from index, and combining
    // the mParamList[0]->GetValue(row) and mParamList[1]->GetValue(col)
    virtual unsigned int GetValue(unsigned int index) const {...}

private:

    static const unsigned int MAX_PARAMS = 10;

    unsigned int mNumParams;
    const Parameter* mParamList[MAX_PARAMS];
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-03 23:49:08

代码语言:javascript
运行
AI代码解释
复制
I have a class which composes objects of a class it inherits from,
which just doesn't seem right.

这不就是复合体的定义吗?

代码语言:javascript
运行
AI代码解释
复制
(parameter values are bit flags)

这是我要质疑的设计部分。也许参数更好的名字应该是FlagSet?

将逐位测试隐藏在接口后面是很好的,但用基础计算机科学中众所周知的解决方案来解决问题,继承似乎有点过头了。

代码语言:javascript
运行
AI代码解释
复制
However, that is somewhat wasteful b/c the general case would be
CompositeParameters which contained just one Parameter.

复合模式的要点是,Leaf对象表示简单的情况,复合对象表示复杂的情况,客户端代码可以将这两种情况视为相同的情况。如果您的接口需要客户端代码来区分这两者,或者遍历基类组件,那么您并不能真正从使用模式中获得任何价值。

例如,如果您的主要关注点是测试,那么基类可以有一个方法:

代码语言:javascript
运行
AI代码解释
复制
bool Test() const;

叶类实现将如下所示:

代码语言:javascript
运行
AI代码解释
复制
bool LeafTester::Test() { return _DoTest(); }

复合类实现将如下所示:

代码语言:javascript
运行
AI代码解释
复制
bool CompositeTester::Test() {
    bool success = true;

    for (int i = 0; i < m_count; i++)
        success &= m_components[i].Test();

    return success;
}

客户端总是像这样使用代码:

代码语言:javascript
运行
AI代码解释
复制
// tester could be a Composite or a leaf, but we don't care:
bool testResult = tester.Test();

我使用了for循环来保持示例的简单性。在实践中,我会使用STL。

票数 1
EN

Stack Overflow用户

发布于 2010-02-03 23:15:58

这似乎是一个非常合理的设计。我要做的唯一更改是将Parameter从一个类更改为一个接口。

然后,您可以有一个实现参数的参数类(或者可能是一个ParameterImpl类),也可以有一个实现参数接口的CompositeParameter类

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2196205

复制
相关文章
Python中的类、对象、继承
上述访问级别更多的是一种编程约定,即便是以双下划线开头的字段,在类的外部也是可以访问的,但不建议这么做。示例代码如下:
雪飞鸿
2018/09/05
2.3K0
Python中的类、对象、继承
PHP 面向对象类的继承
PHP的单继承特点 : 单继承,一个子类只能继承一个父类, 想要达到继承多个类的效果可以采用链式继承
很酷的站长
2023/02/03
6190
类和对象-继承
定义类时,下级别的成员除了拥有上一级的共性,还有自己的特性,就可以考虑使用继承的技术,减少代码的重复
WuShF
2023/02/21
6940
类和对象-继承
类与对象,类的继承,类的派生,类的组合,多态
在python中先有类再有对象,类和对象,你可以看成,类是把对象的相同特征和相同方法汇总再一起,再根据类来生成对象,这个对象具有类的特征与方法
小小咸鱼YwY
2019/07/24
1.2K0
【Python】面向对象编程—类的继承
面向对象中的继承也是指子类(派生类)可以继承父类(基类、超类)的特征和行为,使得子类具有父类的所有属性和方法,并且可以定义自己独有的属性和方法。
阿黎逸阳
2021/03/24
5610
类与对象(一)—— 类(继承)
大西瓜:“类是构造对象的模板,由类构造对象的过程称为创建类的实例。可以说对象是类的实例!”
东边的大西瓜
2022/05/05
3910
类与对象(一)—— 类(继承)
课时38:类与对象:继承
现在需要扩展游戏,对鱼类进行细分,有金鱼(Goldfish)、三文鱼(Salmon)、鲤鱼(Carp),还有鲨鱼(Shark)。那么我们来思考一个问题:能不能不要每次都从头到尾去重新定义一个新的鱼类呢?因为我们知道大多数鱼的属性和方法是相似的,如果有一种机制可以让这些相似的东西得以自动传递,那就方便快捷多了。这种机制就是今天要讲的:继承。
py3study
2020/01/19
3790
课时38:类与对象:继承
类的继承
例子以图书馆中的书入库归类为例。 以下是简化后的父类Book(也可称为基类)。 目的是通过继承该父类,产出Computer(计算机)子类。 并且,子类拥有新方法say,输出自己的书名。
我是leon
2019/08/28
9300
类的继承
继承描述的是子类与父类之间的关系,是一种什么是什么的关系。要找出这种关系,必须先抽象再继承,抽象即抽取类似或者说比较像的部分。
py3study
2020/01/15
7920
类的继承
类的继承
类的继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或者子类从父类处继承发放,使得子类具有父类相同的行为。
算法与编程之美
2023/08/22
1490
类的继承
类的继承
实验目的:掌握类的继承、抽象类的定义和使用、对象的向上转型。 实验内容:已知若干图形,求以该图形为底的锥体的体积。 实验要求:用面向抽象的思想实现。 实验步骤: 1、程序总体框架
不会写代码的杰尼
2022/05/19
7540
类的继承
【C++】继承 ① ( 面向对象特点 | 类之间的关系 | 单继承与多继承 | 继承关系特性 )
本篇博客开始 讲解 IS-A 类关系 中的 继承关系 ( 泛化关系 Generalization ) ;
韩曙亮
2023/10/15
2320
JavaScript对象的继承
基于原型链,即把一个对象的原型设置为另一个对象的实例,那么这个对象实例也就拥有了另一个对象上的属性。
闲花手札
2021/11/17
7260
关于Java中的对象、类、抽象类、接口、继承之间的联系
寒假学习JavaSE基础,其中的概念属实比较多,关联性也比较大,再次将相关的知识点复习一些,并理顺其中的关系。
xbhog
2021/03/20
9080
【C++】类的封装 ① ( 类和对象 | 面向对象三大特征 - 封装 继承 多态 | 类的封装引入 )
" 面向对象编程 " 是一种 " 编程范式 " , 可以适用于所有的 高级语言 , C++ 也包括在内 ;
韩曙亮
2023/10/15
2120
类继承的问题
首先确定好确定好哪个类作为父类,哪个类作为子类,同时要让父类所有能够进行继承的属性前加上public
算法与编程之美
2023/08/22
940
类继承的问题
Python类的继承
类的继承可以看成对类的属性和方法的重用,能够大大的减少代码量,继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,也就是说在python中支持一个儿子继承多个爹。
王大力测试进阶之路
2022/06/07
1.2K0
python类的继承
python在类的继承时,需要注意,当子类定义了构造方法的时候,那么父类的构造方法就不会被自动调用了
灯珑LoGin
2022/10/24
8590
Java子类与父类之间的对象转换(说明继承)
在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换。从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子类对象的时候,通过把变量定义为父类型,我们可以通过一个变量,使用该父类型的所有子类型实例;从父类型向子类型的转换称为向下转换(downcasting),通过向下转换,我们能在必要的时候,将父类型变量转换成子类型变量,使用一些通过子类型才能够使用的方法。以下是我对于对象转换的一些个人理解,如有不对,欢迎指正,虚心向大神们请教。
用户7886150
2020/12/10
3.8K0
PHP面向对象-继承和派生类的定义(一)
继承是一种面向对象编程机制,它允许一个新的类从现有的类中继承属性和方法。在继承中,现有的类称为父类或超类,新的类称为子类或派生类。子类继承了父类的属性和方法,并且可以添加自己的属性和方法,或者覆盖继承的方法。
堕落飞鸟
2023/04/28
4420

相似问题

当你继承的时候,你会继承基类中的超类的对象吗?

236

从使用‘&’字符组成的类继承

14

UML -类继承,你继承了什么?

31

无法创建由从多个类继承的类组成的AngularJS服务。

12

继承与组成

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文