首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基类属性的不同初始化

基类属性的不同初始化
EN

Stack Overflow用户
提问于 2015-08-13 00:45:48
回答 2查看 105关注 0票数 7

考虑一个具有属性的基类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Base 
{
  protected:

  AttributeBase * elementPtr;
  ...
};

和一个派生类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Derived : public Base
{
  ...
};

我还有一个类AttributeDerived,它是从AttributeBase派生的。

当我创建类Base的对象时,我希望以这种方式初始化elementPtr

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elementPtr = new AttributeBase()

但是,当我创建类Derived的对象时,我希望以这种方式初始化elementPtr

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elementPtr = new AttributeDerived()

最干净的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-13 00:49:52

您可以向protected添加一个Base构造函数,该构造函数允许派生类传递elementPtr以使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Base (AttributeBase* elementPtr) : elementPtr(elementPtr)
{}

然后在派生类中调用构造函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Derived() : Base(new AttributeDerived())
{}

如果使用C++11,则可以让其他Base构造函数委托到受保护的构造函数,以限制代码重复。

票数 5
EN

Stack Overflow用户

发布于 2015-08-13 00:53:15

您可以为不同的目的添加不同的Base函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Base 
{
  protected:

    AttributeBase * elementPtr;
    Base(AttributeBase * p) : elementPtr(p) {}

  public:
    Base() : elementPtr(new AttributeBase) {}
};

class Derived : public Base
{
  public:
    Derived() : Base(new AttributeDerived) {}
};

然后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Base b;    // elementPtr = new AttributeBase()
Derived d; // elementPtr = new AttributeDerived()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31983470

复制
相关文章
java 初始化基类
在使用继承过程中,需要先声明新类与旧类相似,用关键字 extends实现 package javahaonan; import static javahaonan.Print.*; class Cleanser{ private String s ="Cleanser" ; public void append(String a) {s+=a;} public void dilute() {append("dilute()" );} public void
葫芦
2019/04/17
5960
C# 继承 基类和派生类基类的初始化C# 多重继承
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
酱紫安
2020/07/24
4.6K0
【Kotlin】类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )
在定义属性时 , 可以使用 lateinit 关键字 设置该属性的 延迟初始化 , 在 实例对象 创建时不进行初始化 , 在使用该属性之前对其进行初始化即可 ;
韩曙亮
2023/03/30
1.6K0
遍历类的属性和值,取两个类的同一属性的不同值。
try { Field[] fields = college.getClass().getDeclaredFields(); Field[] fieldsOld = collegeOld.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; field.setAccessible(true);
qubianzhong
2018/09/19
2K0
MVC的基类
设计一个验证用户身份是否登陆的基类BaseController /// <summary> /// 所有需要进行登录控制的控制器基类 /// </summary> public class BaseController : Controller { /// <summary> /// 当前登录的用户属性 /// </summary> public UserInfo CurrentUserInfo { get;
欢醉
2018/01/22
7830
C++11类属性成员的初始化
在C++11中,大多数的基础数据类型都可以直接初始化,可以不通过构造函数来初始化。还有一些仍旧是类外初始化。由于可能存在对C++11支持的程度不同,以及编译器厂商是否对C++进行了扩展。下面是我的测试平台:
zy010101
2020/03/31
9710
C++11类属性成员的初始化
python 类属性和实例属性、类方法, 静态方法, 实例方法、接口, 协议和抽象基类 (4.2)
非正式的接口, 协议与继承没有关系, 一个类可能会实现多个接口, 从而让实例扮演多个角色
友儿
2022/09/28
6260
基类View
在 Class-based views 源码解析 #1 中我们从宏观层面讨论了 Django 类视图的类继承结构以及命名规律。接下来我们要深入各个具体的类视图,探索其具体的代码实现。本节将分析 base.py 中最重要的的一个类,它也是所有类视图的基类 View 。 之前我们说过,尽管类视图看上去类的种类繁多,但每个类都是各司其职的,且从类的命名就可以很容易地看出这个类的功能。大致可分为如下三个大的功能块,分别由三个类提供对应的方法: 处理 HTTP 请求。根据 HTTP 请求方法的不同做出相应处理。例如同
追梦人物
2018/04/17
9060
给当前Thread类对象初始化ThreadlocalMap属性
也就是如果把一个共享的对象直接保存到ThreadLocal中,那么多个线程的ThreadLocal.get()取得的还是这个共享对象本身,还是有并发访问问题。 所以要在保存到ThreadLocal之前,通过克隆或者new来创建新的对象,然后再进行保存。
好派笔记
2021/10/08
5910
python的抽象基类
与jvm上的语言不一样,python的语言没有interface关键字,而且除了抽象基类,每个类都有相应的接口:类实现或继承的公开属性(方法或数据类型)
哒呵呵
2018/08/06
8960
基类和派生类
  在面向对象设计中,被定义为包含所有实体共性的class类型,被称为“基类”。-百度百科
全栈程序员站长
2022/09/20
9960
BaseMongo基类设计
为进一步完善框架应用,本次系列文章主要是介绍如何完善架构功能,以及如何应用架构做一些具体的应用开发。本系列课程可以在github上找到相应资源,具体每篇文章中都会提供链接。 本次介绍的主要是mongo基类的设计,以及应用。相关请查看文章下面链接下载http://5xpan.com/fs/7hueanfgd6h350fe4/(下载链接有收益,请原谅有广告)。 如果你嫌弃慢的话,也可以直接去github(https://github.com/tnodejs/BaseMongodb) 主要函数结构 私有方法
蛋未明
2018/06/07
1K0
造轮子之属性注入配合懒加载构建服务抽象基类
在前面实现管理API的时候,可以看到我们用的挺多功能是没有通过构造函数注入的。比如缓存DistributedCache,MemoryCache,对象映射Mapper,多语言L,当前用户CurrentUser等等。 这些全都初始化在WheelServiceBase以及WheelControllerBase中,可以通过属性注入完成这个操作,同时为了避免注入太多影响性能,可以配合懒加载实现除IServiceProvider以外的服务注入。
饭勺oO
2023/10/18
2260
【Kotlin】类的初始化 ③ ( init 初始化块 | 初始化顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化块代码 -> 次构造函数代码 )
在 Kotlin 类中 , 可以定义 init 初始化块 , 在其中可以为 变量赋值 , 执行一些检查相关的代码 , 该 init 初始化块在 创建类实例对象 时执行 ;
韩曙亮
2023/03/30
2.3K0
Java 静态属性与实例属性的初始化
类的初始化包括静态属性的初始化和实例属性的初始化,在加载类过程中的准备阶段会给静态属性分配存储空间,并根据属性的类型设置初始值,例如 int 类型静态属性会设置初始值为 0,布尔类型静态属性会设置初始值为 false;实例属性的初始化会在构造实例对象时发生。
zhipingChen
2019/05/08
2.4K0
python抽象基类abc
python中并没有提供抽象类与抽象方法,但是提供了内置模块abc(abstract base class)来模拟实现抽象类。
用户2936342
2018/08/27
8350
【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
① 属性覆盖前提 : 在父类中使用 open 修饰的属性 , 可以在子类中被覆盖 ;
韩曙亮
2023/03/27
1.2K0
【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
python 抽象基类 abstractmethod
class IStream(metaclass=ABCMeta): @abstractmethod def read(self, maxbytes=-1): pass
用户5760343
2019/12/13
7690
C++虚基类
如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。C++提供虚基类的方法,使得在继承间接共同基类时只保留一份成员。
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.1K0
C++虚基类
【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
④ 属性幕后字段 : 属性的实际值存储在 field 幕后字段中 , 只能在属性访问器中可以使用 field 获取该值 ;
韩曙亮
2023/03/27
1.3K0
【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )

相似问题

如何从基类初始化属性?

220

在基类和派生类中初始化基类属性

40

声明派生类的对象,初始化基类的属性

11

初始化基类

22

是否将基类初始化为派生基类?

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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