我在这里有一个概念问题,我喜欢这个:
abstract class A
{ abstract setSomething(bool f1, bool f2);}
class C : A {setSomethng(bool f1, bool f2){/*implementation*/}}
class B : A {setSomething(bool f1, bool f2, bool f3){/*implementation*/} !! ERROR
Run Code Online (Sandbox Code Playgroud)
我正在尝试更改子类"B"中"setSomething"方法的签名,但是它给出了一个错误,即子类B没有实现基本抽象类,无论如何要做到这一点?我的意思是重载一个继承的抽象方法?
我有一个应该转换为库的应用程序.我只复制了项目dpr并更改了源文件:
library aLibrary;
uses
FastMM4,
Forms,
SysUtils,
Windows,
Mainfrm in 'Mainfrm.pas' {Mainform};
{$R *.res}
Procedure DllMain(Reason: Integer);
Begin
If Reason = DLL_PROCESS_ATTACH Then
Begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
ExitCode := 0;
End;
If Reason = DLL_PROCESS_DETACH Then
Begin
Application.Terminate;
MainForm.Free;
End;
End;
Begin
DllProc := @DllMain;
DllProc(DLL_PROCESS_ATTACH);
End.
Run Code Online (Sandbox Code Playgroud)
如您所见,我只是删除了与应用程序初始化相关的通常自动生成的代码行,并将它们放入DllMain过程中,将"program"关键字更改为"library".dll加载得很好,嵌入式程序也运行良好,但我无法在主机进程中设法释放它(FreeLibrary).无论DLL_PROCESS_DETACH代码是什么,dll都会冻结(即使在这种情况下没有任何内容).
什么是释放所有应用程序的正确方法?
我想在Linux上用c做一个简单的即时编译器.
我如何分配内存,以便我可以写出原始x86代码并执行它作为任何其他功能?
我在WPF中有一个ListView,它会在我向其添加项目时调整整个应用程序窗口的大小.我将ListView大小绑定到它所在的网格,它绑定到窗口大小.因此,当用户调整窗口大小时,ListView会增长.问题是当我向ListView添加项目时,它会自动拉伸以尝试适应新内容,这又会拉伸整个窗口的大小.
反正有没有阻止这种行为发生?
我想出了一个新算法来解决子集求和问题,我认为它是在多项式时间内.告诉我,我要么是错的,要么是天才.
快速启动事实:
子集和问题是NP完全问题.在多项式时间内求解它意味着P = NP.
一组长度N中的子集的数量是2 ^ N.
在更有用的手上,长度为N 的唯一子集的数量最大为整个集合减去最小元素的总和,或者,任何子集可能产生的总和的范围在所有负面元素的总和之间和所有正元素的总和,因为没有和可能比所有正或负更大或更小,当我们添加额外元素时,它们以线性速率增长.
这意味着当N增加时,重复子集的数量呈指数增长,并且唯一有用子集的数量仅线性增加.如果可以设计出可以尽早移除重复子集的算法,我们将在多项式时间运行.一个简单的例子很容易从二进制中获取.仅从2的幂的数字,我们可以为任何积分值创建唯一的子集.因此,任何涉及任何其他数字的子集(如果我们拥有所有权力的两个)都是重复和浪费.通过不计算它们及其衍生物,我们几乎可以节省算法的所有运行时间,因为与任何整数相比,2的幂的数字是对数发生的.
因此,我提出了一个简单的算法,它将删除这些重复项,并节省必须计算它们及其所有衍生物.
首先,我们将对仅为O(N log N)的集合进行排序,并将其分为两半,正面和负面.负数的程序是相同的,所以我只勾勒出正数(现在的数字只是正半数,只是为了澄清).
想象一下由sum索引的数组,其中包含正面所有可能结果总和的条目(只记住线性,记住).添加条目时,该值是子集中的条目.就像,array [3] = {1,2}.
通常,我们现在移动到枚举集合中的所有子集.我们从一个长度的子集开始,然后添加到它们.当我们拥有所有独特的子集时,它们形成一个数组,我们只是按照Horowitz/Sahni中使用的方式迭代它们.
现在我们从"第一代"价值观开始.也就是说,如果原始数据集中没有重复的数字,则保证这些值中没有重复.也就是说,所有单值子集,以及集合的所有长度减去一个长度子集.这些可以通过对集合求和,并依次减去每个元素来轻松生成.此外,集合本身是有效的第一代和和子集,以及子集的每个单独元素.
现在我们做第二代价值观.我们循环遍历数组中的每个值,并且对于每个唯一子集,如果它没有它,我们添加它并计算新的唯一子集.如果我们有重复,就会发生乐趣.我们将它添加到碰撞列表中.当我们来添加新的子集时,我们检查它们是否在碰撞列表中.我们通过不太理想(通常更大,但可以是任意)相等的子集来键入.当我们添加到子集时,如果我们生成碰撞,我们什么都不做.当我们添加更理想的子集时,它会错过检查并添加,生成公共子集.然后我们重复其他几代人.
通过以这种方式删除重复的子集,我们不必将重复项与集合的其余部分保持组合,也不必继续检查它们是否存在冲突,也不必对它们求和.最重要的是,通过不创建非唯一的新子集,我们不会从它们生成新的子集,我相信,这可以将算法从NP转换为P,因为子集的增长不再是指数 - 我们丢弃绝大多数之前,他们可以在下一代"再现",并通过与其他非重复子集组合创建更多的子集.
我不认为我已经解释得太好了.我有照片......他们在我脑海里.重要的是,通过丢弃重复的子集,您可以删除几乎所有的复杂性.
例如,想象(因为我手工做这个例子)一个简单的数据集,它以-7到7(非零)为目标,为零.排序和拆分,所以我们留下(1,2,3,4,5,6,7).总和是28.但是2 ^ 7是128.所以128个子集适合1 ... 28的范围,这意味着我们事先知道100个集是重复的.如果我们有8,那么我们只有36个插槽,但现在有256个子集.因此,您可以很容易地看到欺骗的数量现在是220,比以前增加了一倍.
在这种情况下,第一代值是1,2,3,4,5,6,7,28,27,26,25,24,23,22,21,我们将它们映射到它们的组成部分,所以
1 = { 1 }
2 = { 2 }
...
28 = { 1, 2, 3, 4, 5, 6, 7 }
27 = { 2, 3, 4, 5, 6, 7 }
26 = { 1, 3, 4, 5, 6, 7 }
...
21 …
Run Code Online (Sandbox Code Playgroud) 什么是良好的GUI模式,用于显示子项从其父项继承值.换句话说,如果用户在Parent中设置了一些值,我们如何在子节点中指示该值是从父级设置的?
Parent
| Value : Foo
|
|----Child
Value : Foo => inheriting value from parent.
Run Code Online (Sandbox Code Playgroud) 我有一个简单数字的文件,例如:
66
Run Code Online (Sandbox Code Playgroud)
要么
126
Run Code Online (Sandbox Code Playgroud)
如何将其读取为int
C++中的值?
请注意,该文件可能还包含一些空格或在数字后面输入.
我开始是这样的:
int ReadNumber()
{
fstream filestr;
filestr.open("number.txt", fstream::in | fstream::app);
filestr.close()
}
Run Code Online (Sandbox Code Playgroud)
怎么继续?
谢谢.
长话短说:
是否有某种方法可以将抽象方法添加到基类中,从而允许派生类覆盖该方法的返回类型,而无需使用泛型,并且无需使用关键字
new
?
我正在为 LLBLGen Pro 开发一些自定义模板。在此过程中,我拒绝更改 LLBLGen Pro 提供的默认模板,这样如果其他人选择实施我的模板,我的方法就不会覆盖他们的文件。
我开始处理(并取得了良好进展)的一项任务是开发一个为每个实体生成 DTO 的模板。沿着这些思路,一个目标是为我的实体提供一种ToDTO()
方法。为了进行泛型编程,我决定在公共基类中定义此方法,这就是我的麻烦开始的地方。
请记住,ToDTO()
在基类中定义方法的目的是因为我希望创建一个通用存储库(Fetch()
例如,使用方法),我希望在该存储库中工作CommonEntityBase
,而不是特定实体。
LLBLGen 定义其CommonEntityBase
类如下:
public abstract partial class CommonEntityBase : EntityBase2 {
// LLBLGen-generated code
}
Run Code Online (Sandbox Code Playgroud)
我最初的计划是将我的方法添加到另一个部分类中,如下所示:
public abstract partial class CommonEntityBase {
public abstract CommonDTOBase ToDto();
}
Run Code Online (Sandbox Code Playgroud)
我认为继承的类能够将其方法中的返回类型定义为从基类的返回类型派生的类型,如下所示:
public partial class PersonEntity : CommonEntityBase {
public override PersonDTO ToDto(){ return new PersonDTO(); }
}
Run Code Online (Sandbox Code Playgroud)
但是我错了。
我的第二次尝试是使用泛型定义类,如下所示:
public abstract partial class CommonEntityBase<T> : CommonEntityBase
where …
Run Code Online (Sandbox Code Playgroud) 我知道这本身并不完全与编程相关,但程序员是最有可能认识到这一点的人.
我有以下(X和Y是数组,都有3个元素),我无法识别(虽然它让我想起了一些事情,但没有完全!)这里做了什么.它会为其他人敲响任何铃声吗?
我认为你可以忽视下半部分; 鞋帮应该放弃......但我仍然看不到它.
起初它让我想起了3d空间中的线性插值......
SUBROUTINE TRII(X,Y,XR,YR)
DIMENSION X(3),Y(3)
D=X(1)*(X(2)**2-X(3)**2)+
> X(2)*(X(3)**2-X(1)**2)+
> X(3)*(X(1)**2-X(2)**2)
D1=Y(1)*(X(2)*X(3)**2-X(3)*X(2)**2)+
> Y(2)*(X(3)*X(1)**2-X(1)*X(3)**2)+
> Y(3)*(X(1)*X(2)**2-X(2)*X(1)**2)
D2=Y(1)*(X(2)**2-X(3)**2)+
> Y(2)*(X(3)**2-X(1)**2)+
> Y(3)*(X(1)**2-X(2)**2)
D3=X(2)*(Y(3)-Y(1))+
> X(1)*(Y(2)-Y(3))+
> X(3)*(Y(1)-Y(2))
A=D1/D
B=D2/D
C=D3/D
YR=A+B*XR+C*XR**2
RETURN
END
SUBROUTINE TRIM(X,Y,XR,YR,XM,YM)
DIMENSION X(3),Y(3)
D=X(1)*(X(2)**2-X(3)**2)+
> X(2)*(X(3)**2-X(1)**2)+
> X(3)*(X(1)**2-X(2)**2)
D1=Y(1)*(X(2)*X(3)**2-X(3)*X(2)**2)+
> Y(2)*(X(3)*X(1)**2-X(1)*X(3)**2)+
> Y(3)*(X(1)*X(2)**2-X(2)*X(1)**2)
D2=Y(1)*(X(2)**2-X(3)**2)+
> Y(2)*(X(3)**2-X(1)**2)+
> Y(3)*(X(1)**2-X(2)**2)
D3=X(2)*(Y(3)-Y(1))+
> X(1)*(Y(2)-Y(3))+
> X(3)*(Y(1)-Y(2))
A=D1/D
B=D2/D
C=D3/D
XR=-B/(2.*C)
YR=A+B*XR+C*XR**2
XM=XR
IF(XR.GT.X(1).OR.XR.LT.X(3))XM=X(1)
YM=A+B*XM+C*XM**2
IF(YM.LT.Y(1))XM=X(1)
IF(YM.LT.Y(1))YM=Y(1)
RETURN
END
Run Code Online (Sandbox Code Playgroud)
">"是一个延续的标志.
public static void PullData(Hashtable source)
{
IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
//IPEndPoint[] endPoints = ipProperties.GetActiveTcpListeners();
TcpConnectionInformation[] tcpConnections = ipProperties.GetActiveTcpConnections();
foreach (TcpConnectionInformation info in tcpConnections)
{
if (!(info.RemoteEndPoint.Address.ToString() == "192" || info.RemoteEndPoint.Address.ToString() == "127"))
{
source.Add(info.RemoteEndPoint.Address.ToString(), new IPInstance(
new string[info.LocalEndPoint.Port.ToString(), info.RemoteEndPoint.Port.ToString()],
info.RemoteEndPoint.Address.ToString(),
Dns.GetHostEntry(info.RemoteEndPoint.Address.ToString())
));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我一直得到错误1无法隐式地将类型'string'转换为'int'