在以下代码中:
import java.io.*;
public class MyClass1
{
MyClass1()
{
System.out.println("base class");
}
public void print()
{
System.out.println("base print");
}
}
class ChildClass extends MyClass1
{
public ChildClass()
{
System.out.println("child class");
}
public void print()
{
System.out.println("child print");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么当我创建ChildClass类型的实例时,基类的构造函数也会被执行?
我有一个类(Queue),它继承自一个名为Stack的类.它是这样的:
template <class T> class Stack
{
public:
virtual const T pop();
LinkedList<T> lst;
};
template <class T> class Queue : public Stack<T>
{
public:
virtual const T pop();
};
template <class T> const T Queue<T>::pop()
{
const T val = lst[0];
return val;
}
Run Code Online (Sandbox Code Playgroud)
编译器说"lst undecleared"......为什么?
我正在尝试创建一个TCustomRichEdit,上面有一些速度按钮.我怎样才能完成这个行为?组件的高度需要是按钮+ richedit.
[B][I][U]
+-------+
|A1REdit|
| |
+-------+
Run Code Online (Sandbox Code Playgroud)
目前我有以下代码:
private
FBoldButton: TSpeedButton;
constructor TA1RichEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FBoldButton := TSpeedButton.Create(Self);
FBoldButton.Parent := Self;
end;
destructor TA1RichEdit.Destroy;
begin
FreeAndNil(FBoldButton);
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
这描绘了richedit上的速度按钮(因为richedit是父级),我需要按钮位于richedit之上.在这段代码之后,richedit并没有像它应该的那样绘画.
class Base
{
public:
void virtual func() { int i = 0; cout << "i"; }
}
class Derived: public Base
{
public:
void func() { .....****** }
}
Run Code Online (Sandbox Code Playgroud)
在派生类中,当您从派生对象调用func时,如果已经覆盖了func,那么如何仍然具有基本功能.你能打电话给Base.func()吗?谢谢你
是否可以将实例提升为派生类的实例?
例如,假设有一个基类Vehicle.
Vehicle已派生类:Boat,Automobile,Airplane,等...
当Vehicle创建新的类型实例时,车辆的类型是未知的.
后来发现车辆是什么,说它是一个Boat.是否可以将Vehicle实例提升为Boat对象?
澄清:Vehicle实例可能已设置内容,并且提升的对象需要保留这些内容
PS我现在成功地做到了这一点,但是手工而且非常笨重.所以,我想知道是否有一种普遍接受的,规范的方式.
(2017年9月24日)Eric Lippert在下面的每个问题中添加了真实案例:
*我的整个C#体验都是自学成才的,所以我没有学术基础,对"模式"等知之甚少.工厂模式和复合模式的想法听起来很有趣,可能是解决问题的更好方法(需要研究).
我的实际情况是,我使用共享总线架构连接到计算机的测量设备(外围设备)自动进行电子测量.在任何给定的测试平台上,可以根据用户的选择连接各种不同的外围设备.为了自动确定哪些外设可用,我执行一个本地发现过程,找到每个连接外设的总线地址.然后,为了与发现的未知类型的外围设备通信,我创建了一个我调用的基类的实例Device. Device具有某些基本的I/O协议方法和属性,如总线地址,通信超时等.Device然后使用我查询外围设备的身份,找出制造商,型号和序列号.
从该信息I确定的外周的类型和希望"促进"的实例Device将在该外设类型,诸如以一个派生类的实例具体地SpectrumAnalyzer或Oscilloscope或任何.
我认为我在不知不觉中所做的是在工厂类和基类之间创建一个交叉.一旦知道了外围设备的类型,Device就有一个方法可以创建派生类的新实例,并将自己的属性深度复制到该派生实例.
也许如果我在工厂模式方面重新考虑解决方案而不是基类,我可以改进逻辑.
有趣的东西......谢谢你.*
derived ×5
c++ ×2
inheritance ×2
c# ×1
class ×1
components ×1
constructor ×1
delphi ×1
java ×1
promoting ×1
virtual ×1