問題タブ [class-constructors]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - String クラスの暗黙のコンストラクタ
文字列 s2("こんにちは");
暗黙的な文字列コンストラクターを作成する必要がありますか?
String::String(const char* str);
また
このコンストラクターはそれを処理しますか:
String::String(const String &str);
c++ - コンストラクターでのメンバーの初期化
このコードで、オブジェクトがインスタンス化されたときに高さが渡された値で初期化され、幅が常にデフォルト (以下の場合は 2) になるようにコンストラクターを宣言する方法を教えてください。
出力が次のようになるようにコンストラクターを宣言する方法を誰かに教えてもらえますか (パラメーターを 1 つだけ使用してオブジェクトを宣言したい)。
android - コンストラクターが呼び出されないのはなぜですか?
SQLite テーブルにいくつかのレコードを追加しようとしていますが、LogCat からテーブルが存在しないと表示されます。そしてDDMSは、はい、そのテーブルが作成されていない/作成されていないことを示しています。
それでも、SQLiteOpenHelper クラスでテーブルを作成します。
レコードを追加するクラスのメソッドを呼び出します。
これは SQLiteHandlerDeliveryItem のコンストラクターを呼び出す必要があります (sqliteHandler がインスタンス化されている場合) が、そうではありません! onCreate() メソッドにブレークポイントを設定しましたが、確かに到達していません。
なんで?テーブルが作成されるように、コンストラクターを強制的に呼び出すにはどうすればよいですか?
奇妙なのは、他の (動作中の) SQLiteOpenHelper クラスにもブレークポイントを設定したことです。テーブルが存在する/そのコードから作成されたため、少なくとも1回は機能しました。
だから、私のスイングには明らかに穴があります。私は何を誤解しているか間違っていますか?
アップデート
私は答えをTHE答えとしてマークしました。
に関して:
「1. ある時点で getWritableDatabase() または getReadableDatabase() を呼び出す必要があります。」
次のように、レコードを作成または読み取る各メソッドで getWritableDatabase() を呼び出します。
...そして、に関して:
「2. SQLiteHandlerDeliveryItem のコンストラクターでは、super(...) を呼び出す必要があります。」
SQLiteOpenHelper を拡張するクラスで super を呼び出します。
だから...私はまだ問題/解決策が何であるかわかりません...
更新 2
したがって、LogCat でこのテーブルにレコードを挿入しようとすると、次のようになります。
E/SQLiteLog﹕ (1) no such table: deliveryitems
それでも、レコードを追加しようとする私のコードは、次のように SQLiteOpenHelper を拡張する対応する/適切なクラスをインスタンス化します。
...そして、そのクラスにはテーブルを作成するコードがあります:
それで...私は何を間違っているのですか、それとも正しいことをしていないのですか?
更新 3
テーブルが作成されていないのは事実です。LogCat の err メッセージは、その場合であることを示しています (「そのようなテーブルはありません: deliveryitems」です)。
私のコンストラクタは次のようになります。
実際、このコードは入力されません。では、コンストラクターを呼び出すには、どのフープを通過する必要がありますか?
クラスをインスタンス化すると、次のようになると思います。
呼び出された場合でも、コンストラクターは引数 (SQLiteDatabase db) が何であるかをどのように認識しますか? この値はどこから取得しますか?
私は1つのテーブルを持つデータベースを持っています。この 2 番目のテーブルの追加を拒否するだけです。
どこかで推奨されているように、データベースに追加するテーブルごとに SQLiteOpenHelper を拡張する別のクラスを追加しています。
その行に到達すると:
...そして F7 を押してステップインすると、クラス コンストラクターに到達します。
...しかし、onCreate イベントではありません。
したがって、deliveryitems テーブルを作成するコードに到達しないのは「当然」です。しかし、なぜ到達しないのですか - 到達させるにはどうすればよいですか?
c++ - インプレース ファクトリと初期化されていないスペース要件: メンバーごとの構築省略が許可されている場合
このブースト ドキュメントについて考えてみましょう: http://www.boost.org/doc/libs/1_35_0/libs/utility/in_place_factories.html
エキス:
実際には、C++ コンパイラは初期化リスト中にクラス メンバ コンストラクタを呼び出すため、プリプロセッサ (またはプリコンパイラ) なしでは in-place-factory から引数を拡張することはできません。したがって、デフォルトのコンストラクターが呼び出されるのを避けるために、メンバーの型を に変更しchar*
ます。
私が断言するのは、これは悲しいことだということです。
contained_
それが意図したタイプだったと想像してくださいX
:
コンストラクターがまったく呼び出されないようにする方法はありませんか? メンバーを初期化されていない状態にします。これは、型の正しいスペースとアラインメント要件を備えたバイトのプールであるかのように、必要なコンストラクターを自由に呼び出すことができますplacement new
。 -place-factory は) ?
このようにすれば、アラインメントの問題や可読性の問題は発生しませchar*
ん。
また、in-place-factory 表記を使用できますが、X
型ではなく、char*
型に対して使用できます。
また、答えを考えるときは、構造体C
がスタック上でインスタンス化されている場合、ソリューションが直接その場で機能できる必要があることを常に心に留めておいてください。ポインターもヒープ割り当ても必要ありません。contained_
オブジェクトはその場に留まる必要があります、スタック上。
元のブースト ソリューションではnew
、16 バイトのアラインメントを利用していることがわかります (Microsoft CRT 2014 では、4096 より大きいオブジェクトの場合は 32 バイトになりました)。そうでなければ、より自然な表記法によって引き起こされる位置合わせの問題を効果的に回避します。
char contained_[sizeof(X)];
もちろん、「修正」は__declspec(align(alignof(X)))
の宣言の前のようなものを使用することですcontained_
が、私が言ったように、char 配列を使用することは保守可能な解決策とは言えず、使用するたびにキャストする必要がありますcontained_
...
ありがとう !
php - Laravel command cannot call $this->info() in child class
I'm just starting out with the basic concepts OO in PHP,
Foo.php
Bar.php
When I run Foo::fire()
it gives: Call to undefined method Foo::__construct()
. But Foo
clearly has a constructor, what am I doing wrong?
Another thing I suspect is that it might be a Laravel problem rather than PHP. This is an artisan
command that I created.
EDIT:
Also calling $this->info('Bar')
anywhere in Bar
will also give Call to a member function writeln() on a non-object
. Why can't I call a parent's method from the child class?
c# - C# のネストされたクラスのヘルプ
二部構成の質問
先生から提供されたコードのスニペットを使用して、ジェネリック ストアの在庫をいくつでも追跡できるように設計された MDI プログラムに取り組んでいます。私の思考プロセスは「ストアには名前とアイテムのレコードがある」というものでした。したがって、以下のクラス定義は、私が定義したストアの範囲を表しています。
パート 1) クラス Store 内に未知数のクラス Record の配列を作成するにはどうすればよいですか? ストアは、たとえば 100 種類のアイテムに限定されないという考えです。アイテムごとに 1 つのレコードがあり、これで新しいレコードを追加できます。
パート 2) このクラス以外でクラスを構築するにはどうすればよいですか? 基本的に、アイテムに関する情報 (名前、ID 番号など) を尋ねるウィンドウを用意します。ストア内に配置する新しいレコードを作成するにはどうすればよいですか?
助けてくれてありがとう。クラス定義は以下です。
c# - 使用しようとしているメソッドで C# コンストラクターが機能しないのはなぜですか?
コンストラクターの仕組みを誤解しているかもしれませんが、いずれにせよ、配列を作成してコンストラクターに入力しようとしています。
私は次のコードを持っています -
Visual Studio 2012 は、メソッドに戻り値の型があることを主張します。BuildDeck メソッドに「void」を追加しただけで、エラーは消えましたが、コンストラクターについて見たすべての例では、クラスと同じ名前を付ける必要があり、それがクラス内の唯一のメソッドでした。
java - あるコンストラクターの値を別のコンストラクターの値で設定する方法は?
私は現在、大学で Java の初心者コースを受講しており、プログラミングの基礎をまだ学んでいます。今週はコンストラクターについて学習してきましたが、今週の課題の後半に行き詰まっているので、助けていただければ幸いです。
ラボの 2 番目の部分 (私が立ち往生している部分) の手順は次のとおりです。
以下のクラス図に示すように、クラス Truck の完全なコードを記述します。コンストラクターで重複したコードを使用しないようにしてください。たとえば、2 つの引数を持つコンストラクターは、1 つの引数を持つコンストラクターを呼び出して、シリンダーの値を設定する必要があります。
これらは、私が作成したいコンストラクターです。
Truck()
Truck(int cylinders)
Truck(int cylinders, String manufacturer)
Truck(int cylinders, String manufacturer, double load)
Truck(int cylinders, String manufacturer, double load, double tow)
これを行う方法に関する説明/例は素晴らしいでしょう