短いバージョン:
次の擬似コードを検討してください。
class Foo {
private:
abstract type myVar;
} // This class is abstract
この動作を標準のC++でどのように実装しますか?
長いバージョン:
MatlabからC++に多くのObj指向のコードを移植する必要があります。私は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属性には、抽象スーパークラスで使用される値と同じ値を使用する必要があります。
- 抽象プロパティは、アクセスメソッドの設定または取得を定義できず(プロパティアクセスメソッドを参照)、初期値を指定できません。具体的なプロパティを定義するサブクラスは、setまたはgetアクセスメソッドを作成し、初期値を指定できます。
では、このような動作をC ++でどのように正しく変換しますか?私が次のようにした場合、それは正しいでしょうか?(つまり、それは悪い設計慣行ではないということです)
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キーワードを翻訳する正しい方法はありますか?