-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>
感謝の........
を
ポインタ値を印刷するときに期待することはありますか?あなたは '*'を使ってそれらを逆参照することを意味しましたか? –
ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –
あなたのコンストラクタ 'Vector(int num1、int num2)'は、コンストラクタが終了したときに範囲外になる一時変数のアドレスを格納しています。 'first'または' second'を省略するとUBになります。コンストラクタで 'first = &num1;'や 'second = &num2;'を使うことはできません。 – drescherjm