Avatar billede krukken Juniormester
09. oktober 2002 - 16:10 Der er 7 kommentarer og
2 løsninger

Exception

Jeg har en funktion y i en klasse x!

Funktionen er som følger:
void x::y(double værdi)
{
  //Koden som skal udføres
  //hvis værdien ikke er under 0
  // eller over 100
}

Hvordan er det så lige at jeg laver en exception! Og det skal være en exception! Forhåbentlig kan exception være i selv funktionen!
Avatar billede chries Nybegynder
09. oktober 2002 - 16:26 #1
nogen ligende det her ?

// Test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream.h>
#include <conio.h>

class COutOfRangeException
{
public:
    COutOfRangeException( char var[], int val )
    {
        sprintf( reason, "variable %s was out range with %i\n", var, val );
    }

    ~COutOfRangeException()
    {
   
    }

    const char *ShowReason() const
    {
        return reason;
    }

private:
    char reason[1024];
};


class Class
{
public:
    void RunMe( int x )
    {
        if( x > 100 )
        {
            throw COutOfRangeException( "x", x );
        }
    }
};

int main(int argc, char* argv[])
{
    Class c;

    try
    {
        c.RunMe( 101 );
    }

    catch( COutOfRangeException ex )
    {
        cout << ex.ShowReason();
    }

    cout << "press enter to exit!" << endl;
    getch();

    return 0;
}
Avatar billede chries Nybegynder
09. oktober 2002 - 16:32 #2
Skal fjernes (hvis du ikke har et visual c++ projekt):
#include "stdafx.h"
Avatar billede krukken Juniormester
09. oktober 2002 - 16:33 #3
Kan det hele ikke samles i den funktion hvor exception skal kastes, altså i mit tilfælde x?!
Avatar billede chries Nybegynder
09. oktober 2002 - 16:59 #4
altså try og catch ? eller hele exception klassen ?

class COutOfRangeException
{
public:
    COutOfRangeException( char var[], int val )
    {
        sprintf( reason, "variable %s was out range with %i\n", var, val );
    }

    ~COutOfRangeException()
    {
   
    }

    const char *ShowReason() const
    {
        return reason;
    }

private:
    char reason[1024];
};


class Class
{
public:
    void RunMe( int x )
    {
        try
        {
            if( x > 100 )
            {
                throw COutOfRangeException( "x", x );
            }
        }

        catch( COutOfRangeException ex )
        {
            cout << ex.ShowReason();
        }
    }
};

int main(int argc, char* argv[])
{
    Class c;

    c.RunMe( 101 );

    cout << "press enter to exit!" << endl;
    getch();

    return 0;
}
Avatar billede chries Nybegynder
09. oktober 2002 - 17:00 #5
eller mere uden brug af extra klasse ?:
#include <iostream.h>
#include <conio.h>

class Class
{
public:
    void RunMe( int x )
    {
        if( x > 100 )
        {
            throw 10;
        }
    }
};

int main(int argc, char* argv[])
{
    Class c;

    try
    {
        c.RunMe( 101 );
    }

    catch( int exceptionNo )
    {
        cout << "exception: " << exceptionNo << endl;
    }

    cout << "press enter to exit!" << endl;
    getch();

    return 0;
}
Avatar billede krukken Juniormester
09. oktober 2002 - 17:06 #6
JAmen det hele!Så det hele er i min funktion x! Så det slet ikke har noget at gøre med main eller andre ufunktioner! jeg ved at jeg er besværlig:-)
Avatar billede chries Nybegynder
09. oktober 2002 - 17:10 #7
okay, hvad er der så i vejen med det her ? :-)

#include <iostream.h>
#include <conio.h>

class Class
{
public:
    void RunMe( int x )
    {
        try
        {
            if( x > 100 )
            {
                throw 10;
            }
        }

        catch( int exceptionNo )
        {
            cout << "exception: " << exceptionNo << endl;
        }
    }
};

int main(int argc, char* argv[])
{
    Class c;

    c.RunMe( 101 );

    cout << "press enter to exit!" << endl;
    getch();

    return 0;
}
Avatar billede chries Nybegynder
09. oktober 2002 - 17:12 #8
det kan også gøres med strenge:
#include <iostream.h>
#include <conio.h>

class Class
{
public:
    void RunMe( int x )
    {
        try
        {
            if( x > 100 )
            {
                throw "out of bounds";
            }
        }

        catch( char *str )
        {
            cout << str << endl;
        }
    }
};

int main(int argc, char* argv[])
{
    Class c;

    c.RunMe( 101 );

    cout << "press enter to exit!" << endl;
    getch();

    return 0;
}
Avatar billede soepro Nybegynder
10. oktober 2002 - 15:36 #9
Krukken >> Med mindre du vil kaste en standard exception:

class myClass
{
  public:
  void RunMe(int x)
  {
    if (x > 10)
      throw Exception("X out of bounds2);
    cout << "X er OK. (" << %d << endl;
  };
}; // myClass

int main(void)
{
  myClass c;

  try
  {
    c.RunMe(100);
  }
  catch (Exception &e) // Eller bare catch( ... )
  {
    cout << e.Message() << endl;
    return -1;
  };
  return 0;
}

så skal du definere en, som chries skriver.
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