私はC++で次のクラスを持っています
class MyClass {
public:
bool flag;
MyClass (bool flag = false) {
this->flag = flag;
}
...
};
私のメイン(テストに使用)には、そのようなものがあります
int main() {
MyClass number1 = MyClass(true);
MyClass number2 = MyClass(false);
MyClass number3 = new MyClass(false);
MyClass number4 = new MyClass(true);
MyClass number5 = new MyClass();
std::cout << number1.flag << number2.flag << std::endl;
std::cout << number3.flag << number4. flag << number5.flag << std::endl;
}
そして私の出力(ブール出力がtrueまたはfalseであり、出力がより適切にフォーマットされていると想像してください)
true, false
true, true, true
問題は、「new」キーワードを使用して「MyClass」オブジェクトを作成すると、引数コンストラクターに何を入れたか、何を入れなかったかに関係なく、常にフラグ変数がtrueに設定されることです。
これは、「new」を使用していないコンストラクターに対しては機能しますが、それを使用しているコンストラクターに対しては機能しません。キーワードnewを使用する場合と使用しない場合の唯一の本当の違いは、使用しない場合は変数がスタック上に作成され、使用しない場合はヒープ上に作成されることです。これがうまくいかない可能性があるとは思いません。
正しく動作させたい場合、何を変更する必要がありますか?クラスには、フラグ変数を正常に変更できる他のメソッドがありますが、初期化しても機能しません。また、メンバー初期化リストを使用して変数を作成しようとしましたが、それも機能しません。
ご協力いただきありがとうございます!
編集:これがコンパイルを行うコードです。Test.c++とAbstractCell.hの2つのファイルがあります。AbstractCellはMyClassであり、このコードを実行すると、「isAlive:1」が出力されます。
void test_abstract_2(){
AbstractCell one = new AbstractCell();
std::cout << std::endl << "isAlive: " << one.alive << std::endl;
}