标签: implementation

C++:使方法成为虚拟的含义

应该是一个新手问题......

我在现有的类A中有现有的代码,我想扩展它以覆盖现有的方法A :: f().

所以现在我想创建类B来覆盖f(),因为我不想只改变A :: f(),因为其他代码依赖于它.

为此,我需要将A :: f()更改为虚拟方法.

我的问题是除了允许动态调用方法(使用B的实现而不是A)之外还有其他任何影响使方法成为虚拟的吗?我打破了某种优秀的编程习惯吗?这会影响试图使用A :: f()的任何其他代码吗?

请告诉我.

谢谢,jbu

编辑:我的问题更多的是让别人的方法虚拟有什么不对吗?即使你没有改变其他人的实现,你仍然需要进入某人的现有代码并对声明进行更改.

c++ virtual implementation overriding

2
推荐指数
1
解决办法
1351
查看次数

将私有API放在.m文件和Cocoa中的.h文件中的公共API是一种好习惯吗?

我当前项目中的许多类都有几个属性和方法,只能从类本身中调用.此外,他们可能会根据班级的当前状态搞乱班级的工作.
目前,所有这些接口都在.h文件的主接口声明中定义.将"私有"方法和属性放在.m文件的顶部是不错的做法?

这不会影响任何事情,因为我很可能是唯一一个看过这个源代码的人,但当然知道未来的项目会很有趣.

cocoa implementation private interface

2
推荐指数
2
解决办法
290
查看次数

信号量实施

我想知道是否有办法在C++(或C#)中实现信号量,任何有帮助的库.我尝试使用OpenMP但我无法实际阻止线程,而是我不得不忙着等待它们,如果/当我没有足够数量的线程时会导致死锁.首先,我正在寻找一个可以让我阻止/生成/杀死我的线程的库.
其次,有没有已经实现信号量的库?
最后,当我被介绍到信号量的上下文时,我发现它非常有用(也许我错了?)但我没有看到很多库(如果有的话)实现它.我熟悉OpenMP,环顾英特尔的TBB,C#线程.但是在这些中我都没有明确地看到信号量.那些信号量不像我想的那么实用吗?还是他们难以实施?还是我不知道?
PS
信号量可以跨平台实现吗?因为它们可能与操作系统有关.

c# c++ implementation semaphore

2
推荐指数
1
解决办法
3629
查看次数

deque和STL队列(OR堆栈)的链表(+ vector)实现之间有什么区别?

我们知道标准容器类模板deque和list可用于实现queue和+ vector来实现堆栈.但是,这两个实现之间有什么区别,如果我们总是使用相同的方法来访问,也不能使用at()或[]来访问任意元素,就像我们使用deque(vector)一样.

c++ queue implementation stack stl

2
推荐指数
1
解决办法
2033
查看次数

这在Objective-C中意味着什么

我有一个名为ManageAddressBook.m的文件.该文件里面有两个@implementation

第二个是什么意思?

@implementation ManageAddressBook

@end

@implementation NSString (Additions)

@end
Run Code Online (Sandbox Code Playgroud)

implementation objective-c ios objective-c-category

2
推荐指数
2
解决办法
219
查看次数

可以检查核心C#功能的内部

今天我很震惊,有比较内心的倾向Buffer.BlockCopy,Array.CopyTo. 我很好奇,看看是否在幕后Array.CopyTo被召唤Buffer.BlockCopy.这背后没有实际用途,我只想进一步了解C#语言及其实现方式.不要跳枪并指责我微观优化,但你可以指责我好奇!

当我在mscorlib.dll上运行ILdasm时,我收到了这个 Array.CopyTo

.method public hidebysig newslot virtual final 
    instance void  CopyTo(class System.Array 'array',
                          int32 index) cil managed
{
  // Code size       0 (0x0)
} // end of method Array::CopyTo
Run Code Online (Sandbox Code Playgroud)

这个 Buffer.BlockCopy

.method public hidebysig static void  BlockCopy(class System.Array src,
                                            int32 srcOffset,
                                            class System.Array dst,
                                            int32 dstOffset,
                                            int32 count) cil managed internalcall
{
  .custom instance void System.Security.SecuritySafeCriticalAttribute::.ctor() = ( 01 00 00 00 ) 
} // end of method Buffer::BlockCopy
Run Code Online (Sandbox Code Playgroud)

坦率地说,这令我感到困惑.我从未在我没有创建的dll/exe上运行ILdasm.这是否意味着我将无法看到这些功能是如何实现的?搜索周围只显示了一个stackoverflow问题 …

c# implementation il mscorlib

2
推荐指数
1
解决办法
611
查看次数

我可以覆盖接口属性吗?

Shell示例如下.基本上,我希望客户和员工从IPerson实施SSN属性.但是,我希望客户得到并设置(这不是问题),但我希望员工只得到.

Public Interface IPerson
    Property SSN As String
End Interface

Public Class Client
    Implements IPerson
    Public Property SSN As String Implements AELName.IPerson.SSN
        Get
            Return _SSN
        End Get
        Set(value As String)
            _SSN = value
        End Set
    End Property
End Class

Public Class Employee
    Implements IPerson
    Public Readonly Property SSN As String Implements AELName.IPerson.SSN
        Get
            Return _SSN
        End Get
    End Property
End Class
Run Code Online (Sandbox Code Playgroud)

员工生成错误"'SSN'无法实现'SSN',因为接口'IPerson'上没有匹配的属性".是否有一种简单的方法来覆盖Employee的SSN实现?

vb.net implementation overriding properties interface

2
推荐指数
1
解决办法
1810
查看次数

当你在列表上调用`append`时会发生什么?

首先,我不知道这个问题的最合适的标题是什么.竞争者:"如何list.append在自定义类中实现".

class有个叫Individual.这是课程的相关部分:

from itertools import count
class Individual:
    ID = count()
    def __init__(self, chromosomes):
        self.chromosomes = list(chromosomes)
        self.id = self.ID.next()
Run Code Online (Sandbox Code Playgroud)

这是我想要用这个类做的事情:

假设我实例化了一个没有染色体的新个体:indiv = Individual([])我想稍后为这个人添加染色体.目前,我必须这样做:

indiv.chromosomes.append(makeChromosome(params))
Run Code Online (Sandbox Code Playgroud)

相反,我理想的做法是:

indiv.append(makeChromosome(params))
Run Code Online (Sandbox Code Playgroud)

具有相同的效果.

所以我的问题是这样的:当我打电话append给一个清单时,真正发生了什么?是否有被调用的__append__(或__foo__)?在我Individual班上实现这个功能会让我得到理想的行为吗?

我知道,比如,我可以实现__contains__Individual启用if foo in indiv功能.我将如何进行启用indiv.append(…)功能?

python implementation class append

2
推荐指数
1
解决办法
183
查看次数

"按名称呼叫"会减慢Haskell的速度吗?

我认为它没有.

我的理由是Haskell是纯函数式编程(没有I/O Monad),如果"名称"相同,他们可以使每个"名字调用"使用相同的评估值.

我对实现细节一无所知,但我真的很感兴趣.
详细解释将非常感谢:)

顺便说一句,我试过谷歌,很难得到任何有用的东西.

performance implementation haskell callbyname

2
推荐指数
1
解决办法
659
查看次数

声明本地类后,ABAP程序抛出"语句无法访问"

以下ABAP程序抛出错误Statement is not accessible.该程序包含一个接口和两个类:c2继承自c1.语句中抛出错误CREATE OBJECT cref1.

REPORT  z_upcast_downcast_objref.
INTERFACE i1.
  DATA a1 TYPE i.
ENDINTERFACE.                    "i1

INTERFACE i2.
  INTERFACES i1.
  ALIASES a1 FOR i1~a1.
  DATA a2 TYPE i.
ENDINTERFACE.                    "i2

CLASS c1 DEFINITION.
  PUBLIC SECTION.
    INTERFACES i2.
ENDCLASS.                    "c1 DEFINITION

CLASS c2 DEFINITION INHERITING FROM c1.
  PUBLIC SECTION.
    METHODS m1.
ENDCLASS.                    "c2 DEFINITION

CLASS c2 IMPLEMENTATION.
  METHOD m1.
    WRITE : / 'In c2->m1 method'.
  ENDMETHOD.                    "c2
ENDCLASS.                    "c2 DEFINITION

DATA: iref TYPE REF …
Run Code Online (Sandbox Code Playgroud)

sap implementation abap class definition

2
推荐指数
1
解决办法
5123
查看次数