2017-05-24 9 views
-2

私はベクタークラスを作成しましたが、メインにオブジェクトを印刷すると値のアドレスが表示されます。なぜですか? ありがとうございました。C++ - ポインタを使用して、値の代わりにアドレスを表示します。なぜですか? (use operator)

Vector.header:

#include <iostream> 
class Vector{ 
private: 
int* first; 
int* second; 

public: 

Vector(); 
Vector(int num1, int num2); 
~Vector(); 
Vector(Vector& other); 
int* getFirst(); 
void setFirst(int* first); 
int* getSecond(); 
void setSecond(int* second); 
void print(); 

const Vector& operator=(const Vector& other){ 
    first = other.first; 
    second = other.second; 
    return *this; 
} 

Vector operator++(){ 
    return Vector(*first + 1, *second + 1); 
} 

Vector operator--(){ 
    return Vector(*first - 1, *second - 1); 
} 
}; 

Vector::Vector(){ 
first = 0; 
second = 0; 
} 

Vector::Vector(int num1, int num2){ 
first = &num1; 
second = &num2; 
} 

Vector::~Vector(){ 

} 

Vector::Vector(Vector& other) : first(other.first), second(other.second){} 

int* Vector::getFirst(){ 
return first; 
} 

void Vector::setFirst(int* f){ 
first = f; 
} 

int* Vector::getSecond(){ 
return second; 
} 

void Vector::setSecond(int* s){ 
second = s; 
} 

void Vector::print(){ 
std::cout << "<" << getFirst() << "," << getSecond() << ">" << std::endl; 
} 

main.cppに:

#include <iostream> 
#include "Vector.h" 
int main(){ 
Vector* v1 = new Vector(2, 3); 
Vector* v2 = new Vector(5, 6); 

v1++; 
v2--; 

v1->print(); 
v2->print(); 

system("pause"); 
return 0; 
} 

私を印刷:あなたの助けのための

<FDFDFDFD,ABABABAB> 

<0000008F,FDFDFDFD> 

感謝の........

+2

ポインタ値を印刷するときに期待することはありますか?あなたは '*'を使ってそれらを逆参照することを意味しましたか? –

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

あなたのコンストラクタ 'Vector(int num1、int num2)'は、コンストラクタが終了したときに範囲外になる一時変数のアドレスを格納しています。 'first'または' second'を省略するとUBになります。コンストラクタで 'first = &num1;'や 'second = &num2;'を使うことはできません。 – drescherjm

答えて

0

私は主にオブジェクトを印刷して、値のアドレスを出力します、なぜですか?

各式の型はポインタなので、ストリーム挿入演算子は、ポインタオペランドでアドレスを出力するように指定されています(文字へのポインタでない限り)。有効なオブジェクトにこの時点でv1ポイントを

Vector* v1 = new Vector(2, 3); 

:あなたは任意のアドレスを指すポインタのメンバ関数を呼び出すため、プログラムの動作は、未定義であることを

注意。

v1++; 

v1もはや有効なオブジェクトを指していません。

v1->print(); 

動作は未定義です。

関連する問題