Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2012, 07:17   #1
Region27
 
Регистрация: 04.05.2012
Сообщений: 8
По умолчанию как то странно выводит

Есть вот такая программка
Код:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
class TMPoint
{
public:
        TMPoint(); 
        TMPoint(int ix,int iy);
        TMPoint(const TMPoint& src);
        void Shift(int ix,int iy);
        void Shift(const TMPoint& p);
        int x,y;
        TMPoint& operator += (const TMPoint& p);
        TMPoint& operator += (int shift);
        TMPoint& operator = (const TMPoint& p);
        int equal(int i){return i;}
        void setX (int X1){x=X1;}
        void setY (int Y1){y=Y1;}
        int getX(){return x;}
        int getY(){return y;}
};

class TLine
{
public:
        TLine() {}
        TLine(const TMPoint& p1,const TMPoint& p2):P1(p1),P2(p2) {}
        virtual void setP1(const TMPoint& p) {P1=p;}
        virtual void setP2(const TMPoint& p) {P2=p;}
        TMPoint getP1() const {return P1;}
        TMPoint getP2() const {return P2;}
protected:
        TMPoint P1,P2; 

};

class TColorLine:public TLine
{
public:
        TColorLine() {}
        TColorLine(const TMPoint& p1,const TMPoint& p2):TLine(p1,p2) {}
        void setColor(long c) {Color=c;}
        long getColor() const {return Color;}
protected:
        long Color;
};

class TGridLine:public TColorLine
{
public:
        TGridLine(): Width(1) {}
        TGridLine(const TMPoint& p1, const TMPoint& p2):TColorLine(p1,p2),
        Width(1) {}
        void setWidth(int w) {Width=w;}
        int getWidth() const {return Width;}
        virtual void setP1(const TMPoint& p);
        virtual void setP2(const TMPoint& p);
protected:
        int Width;
        void snapToGrid(TMPoint& p);
};

void TGridLine::setP1(const TMPoint& p){
        TMPoint tmp=p;
        snapToGrid(tmp);
        TLine::setP1(tmp);
}
void TGridLine::setP2(const TMPoint& p){
        TMPoint tmp=p;
        snapToGrid(tmp);
        TLine::setP2(tmp);
}
void TGridLine::snapToGrid(TMPoint& p)
{
        p.setX(p.getX()/Width*Width);
        p.setY(p.getY()/Width*Width);
}

TMPoint& TMPoint::operator += (const TMPoint& p) 
{
        Shift(p);
        return *this;
}

TMPoint& TMPoint::operator += (int shift)
{
        x+=shift;y+=shift;
        return *this;
}

TMPoint& TMPoint::operator = (const TMPoint& p)
{
        x=p.x;y=p.y;
        return *this;
}

TMPoint::TMPoint() // êîíñòðóêòîð ïî óìîë÷àíèþ
{
        x=y=3;
}
TMPoint::TMPoint(int ix,int iy) 
{
        x=ix; y=iy;
}
TMPoint::TMPoint(const TMPoint& src)
{
         x=src.x; y=src.y;
}
void TMPoint::Shift(int ix,int iy)
{
        x+=ix;y+=iy;
}
void TMPoint::Shift(const TMPoint& p)
{
        x+=p.x;y+=p.y;
}

void swap(int& a,int& b)
{
        int tmp=a;
        a=b;
        b=tmp;

}

TMPoint pt(15,15);
TLine l1, l2;
TColorLine cl1,cl2;
TGridLine gl1, gl2;
TLine* lines[]={&l1,&l2,&cl1,&cl2,&gl1,&gl2,0};;

void main()
{
        gl1.setWidth(10);
        gl2.setWidth(10);
        for(int i=0;lines[i];++i){
        lines[i]->setP1(pt);
        printf("i=%d, x=%d, y=%d\n",i,*lines[i]);}
        getch();
}
выводить должен вот так
но по чему то выводит вот так
не подскажите как это можно исправить??

Последний раз редактировалось Region27; 21.10.2012 в 07:20.
Region27 вне форума Ответить с цитированием
Старый 21.10.2012, 10:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
printf("i=%d, x=%d, y=%d\n",i,*lines[i]);}
Заказаны три целочисленных параметра
А передает всего два: i и *lines[i]
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.10.2012, 11:14   #3
Region27
 
Регистрация: 04.05.2012
Сообщений: 8
По умолчанию

У меня элемент массива line это пара чисел, то есть нужно три все таки нужно три числа заказывать как я понимаю, да и даже если убрать один целочисленный параметр на выходе получается то же самое только без третьего числа то есть вы водит пары типа: i=0, x=4202840
Region27 вне форума Ответить с цитированием
Старый 21.10.2012, 12:24   #4
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Region27 Посмотреть сообщение
У меня элемент массива line это пара чисел, то есть нужно три все таки нужно три числа заказывать как я понимаю, да и даже если убрать один целочисленный параметр на выходе получается то же самое только без третьего числа то есть вы водит пары типа: i=0, x=4202840
Как я понимаю, *lines - это указатель (адрес); программа его и выводит на экран... .
nick42 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как плюсовать цифры и выводит в лейбл? megostudent Общие вопросы по Java, Java SE, Kotlin 4 10.01.2012 20:41
Как то так странно! MAZADA Общие вопросы Delphi 0 13.08.2011 15:46
Удаление строки в StringGrid работает как-то странно. Turboworld Общие вопросы Delphi 3 25.04.2011 09:04
Как сделать программу которая выводит значение выражения Fhk32 Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2010 18:04