Avatar billede mbm2016 Nybegynder
12. januar 2010 - 13:54 Der er 7 kommentarer og
1 løsning

C++ - Operator overloading?

Hej eksperter,

Jeg sidder og bakser med min egen stream klasse og tænkte at jeg ville overloade insertion operatoren: <<

Men det resulterer bare i en memory exception: Access violation

Jeg tjekkede så min streampos variabel, og så at dens adresse ændres ved andet kald til insertion operatoren: <<
i main funktionen?

Min Kode:

class Stream
{
    public:
    int * streampos;
    char * charstream;
    Stream(size_t capacity = 256)
    {
        charstream = new char[256];
        streampos = new int[256];

    };
    ~Stream()
    {
        delete[] charstream;

    };

    Stream&  operator <<(char * p)
    {

        int i = 0;
        while((int)*(p+i) != 0)
        {
            cout<< i << ": " << (int)(p+i) << " = " << *(p+i) << " ::::  " << endl;
            i++;
        }

    }

};


int main()
{
    Stream stream;
    stream << "HEJ" << "Med dig hvad laver du";
    return 0;
}



Jeg takker på forhånd

/Magnus
Avatar billede arne_v Ekspert
12. januar 2010 - 15:32 #1
Hvordan virker dette:

#include <iostream>

using namespace std;

class Stream
{
    public:
    int * streampos;
    char * charstream;
    Stream(size_t capacity = 256)
    {
        charstream = new char[256];
        streampos = new int[256];

    };
    ~Stream()
    {
        delete[] charstream;

    };

    Stream&  operator <<(const char * p)
    {

        int i = 0;
        while((int)*(p+i) != 0)
        {
            cout<< i << ": " << (int)(p+i) << " = " << *(p+i) << " ::::  " << endl;
            i++;
        }
        return *this;
    }

};


int main()
{
    Stream stream;
    stream << "HEJ" << "Med dig hvad laver du";
    return 0;
}
Avatar billede mbm2016 Nybegynder
12. januar 2010 - 22:43 #2
streampos´s adresse ændres stadig?

Jeg kan simpelthen ikke forstå det?
Avatar billede arne_v Ekspert
12. januar 2010 - 23:13 #3
Hvordan ser du det? Den bliver jo ikke brugt i koden!
Avatar billede mbm2016 Nybegynder
13. januar 2010 - 07:14 #4
Jeg ser det i mine watches, i min debugger?
Avatar billede mbm2016 Nybegynder
13. januar 2010 - 07:16 #5
Jeg fandt ud af det ;) Jeg var kommet til at gøre funktionen const i stedet for variablen :)

Men jeg forstår ikke for den skal returnere sig selv? Altså insertion operatoren.
Avatar billede arne_v Ekspert
17. januar 2010 - 22:46 #6
return *this;

er fordi:

stream << "HEJ" << "Med dig hvad laver du";

udføres som:

(stream << "HEJ") << "Med dig hvad laver du";

og parentesen skal derfor returnere noget som den næste << kan udføres på.
Avatar billede mbm2016 Nybegynder
20. januar 2010 - 07:51 #7
Many thanks to your arne, du får point ;) smid et svar.
Avatar billede arne_v Ekspert
20. januar 2010 - 14:56 #8
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester