简要版本:
考虑以下伪代码:
class Foo {
private:
abstract type myVar;
} // This class is abstract
如何在标准C++中实现这种行为?
详细说明:
我需要将很多面向对象的Matlab代码移植到C++。
请注意,我对Matlab没有任何经验,而且自2007年以来就没有使用过C++。
我在这个主题上进行了大量搜索,但是我找不到合适的答案来回答我的问题。 所以我来到这里 :)
假设您有这个Matlab类:
classdef Foo < handle
properties (Abstract, Dependent)
A
end
properties
B
end
methods (Abstract)
computeA()
end
methods (Access = protected)
function obj = Foo(bar)
obj.B = Matlab.BlaBlaBla(bar)
end
end
我认为这个类不能被直接分配,因为它的构造函数是受保护的。另外,属性"A"是抽象的(暂不考虑它也是依赖性的)。MathWorks告诉我们,这意味着:
- 具体子类必须重新定义抽象属性而不使用Abstract属性,并且必须使用和抽象超类中使用的相同的SetAccess和GetAccess属性值。
- 抽象属性不能定义设置或获取访问方法(请参见属性访问方法),也不能指定初始值。定义具体属性的子类可以创建设置或获取访问方法并指定初始值。
class Foo {
private:
type A;
type B;
protected:
virtual void computeA() = 0;
Foo(type bar) { this.B = SomeFoo(bar); }
}
我认为(可能我错了),如果我这样做,那么其他人也会这样做。
class Subclass: Foo {
protected:
void computeA(){...}
public:
type A() { computeA(); return A; } //This is A getter that grants Dependent behavior
}
否则在编译时会出现错误。
我错了吗?有更好的方法吗? 另外,是否这是正确翻译 Dependent 关键字的方式?