0

「Person」という Person クラスのコンストラクターがあります。次のようになります。

    Person(const char * their_name, const char * email, int day, int month, int year)
        : name(0), email_address(0), birthday(day, month, year) {

        name = new char [strlen(their_name)+1];
        strcpy_s(name, strlen(their_name) +1, their_name);

        email_address = new char[strlen(email) + 1]; 
        strcpy_s(email_address, strlen(email) + 1, email); 

        cout << "\nPerson(...) FIRST CONSTRUCTOR CREATING: "<<name<<"\n";
        printOn(cout);
    }

このクラスにはプライベート変数があります。

private: 
    char * name; 
    char * email_address; 
    Date birthday; 

メインで次のようにコンストラクターをテストすると、1 エラーまたは何かがオフになると思います。

Person *p1 = new Person("Sarah", "iam@awesome.com", 2,2,1000);

これは私のコンソールに出力されます:

Person(...) FIRST CONSTRUCTOR CREATING: Sarah
ààà

コンストラクターの実行後に a が出力される理由がわかりません...誰でも問題を確認できますか?

編集: 私の printOn メソッド

/*print person on output stream o*/
    virtual void printOn(ostream & o) const { 
        //print person
         o << "………";
    } 

およびオーバーライドされた << 演算子

ostream & operator<<(ostream & ostr, const Person & p) { 
    p.printOn(ostr); 
    return ostr; 
} 
4

2 に答える 2

0

どの関数 printOn(cout); が明確ではありません。コンストラクターで行います。それがその出力である可能性はありますか?

関数 strcpy_s については、使用する必要はありません。古い関数 strcpy を使用する方がはるかに優れています。コードでは、strlen を 2 回呼び出します。1 回目はメモリを割り当てるとき、2 回目は strcpy_s を使用するときです。

于 2013-10-30T19:34:24.243 に答える
0
于 2014-07-24T00:50:55.923 に答える