c ++ - 使用指针,打印地址而不是值,为什么? (使用运营商)

时间:2017-05-24 18:30:30

标签: c++

我编写了矢量类,但是当我在main中打印对象时,它会打印出值的地址,为什么? 非常感谢你的帮助。

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>

感谢您的帮助........

1 个答案:

答案 0 :(得分:0)

  

我在主打印物体时打印出值的地址,为什么?

因为每个表达式的类型是指针。并且指定了流插入运算符以使用指针操作数输出地址(除非它是指向字符的指针)。

请注意,程序的行为是未定义的,因为您在指向任意地址的指针上调用成员函数:

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

此时v1指向有效对象。

v1++;

现在v1不再指向有效对象。

v1->print();

行为未定义。