Как напечатать значение указателей, указывающих на тип класса c ++

0

Как напечатать значение указателей, указывающих на тип класса в функции print, как глобус, который я пытаюсь, но idk, как напечатать значение x и y, на которое указывает указатель. этот код:

int main(){

#include<iostream>
using namespace std;
    class POINT { 
        public:
            POINT (){ } 
            POINT (int x, int y){ x_=x; y_=y;}
            int getX (){ return x_; } 
            int getY (){ return y_; }
            void setX (int x) { x_ = x; }
            void setY (int y) { y_ = y; }
        void print( ) { cout << "(" << x_ << ","<< y_ << ")";}
        void read( ) {cin>> x_; cin>>y_;}
        private:        
            int x_;
         int y_;
};  
 void print (   POINT * p1Ptr , POINT * p2ptr){
    POINT* x= p1Ptr; POINT*y=p2ptr;
    cout<<x<<y;
} 
int main(){

 POINT p1(3,2);
 POINT p2(6,6);
  POINT *p1Ptr=&p1;
    POINT *p2Ptr=&p2;
    double d=0.0;
     double *dPtr=&d;
     p1Ptr->getX();
     p2Ptr->getX();
     p1Ptr->getY();
     p2Ptr->getY();
     print ( &p1, &p2); 
    system ("pause");
    return 0;
}
Теги:

2 ответа

2
Лучший ответ

Я не совсем уверен, что это то, что вы имеете в виду, но как насчет:

class POINT { 
public:
    // skipped some of your code...

    void print(std::ostream& os) const
                         // note ^^^^^ this is important
    {
        // and now you can print to any output stream, not just cout
        os << "(" << x_ << ","<< y_ << ")";
    }

    // skipped some of your code...
};

std::ostream& operator<<(std::ostream& os, const POINT& pt)
{
    pt.print(os);
    return os;
}

void print (POINT * p1Ptr , POINT * p2ptr){
    cout << *p1Ptr << *p2ptr;
}
  • 0
    +1 Это очень распространенный подход (на самом деле я использую его все время). Название вопроса, вероятно, было бы лучше: «Как мне переопределить оператор вставки потока для моих пользовательских типов?»
2

Вы хотите cout << *x << *y; (или cout << *p1Ptr << *p2ptr; как на самом деле нет смысла (каламбур!) при копировании указателя на POINT внутри функции).

Извините, я подумал, что есть operator<< для POINT.

Вам нужно использовать p1ptr->print(); p2ptr->print(); p1ptr->print(); p2ptr->print(); для использования функций, которые у вас уже есть.

  • 0
    мне жаль, что это: cout << * p1Ptr << * p2ptr;
  • 0
    +1 за немедленное и простое исправление, хотя я думаю, что это помогло бы ОР рассмотреть гораздо более гибкое и масштабируемое решение моего ответа, чтобы получить выгоду в будущем, когда код будет расти.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню