klasa mystring - braki w kodzie?

0

Witam.

jestem dziewczyną, co gorsza studiuję informatykę, do pewnego momentu z programowaniem nie miałam większych problemów, niestety mam taką sieczkę w głowie że sklejam kod z gotowców bo z zajęć zbyt wiele nie wynosimy.

Moim zadaniem było napisać (tzn. ulepszyć klasę z materiałów wykładowych o wyjątki ale mniej nerwów stracę kombinując sama niż poprawiając klasę w której za każdą funkcją widzę "};") klasę mystring z wyjątkami. Klasa już jest, ale podczas kompilacji napotykam problem, kompilator oczekuje czegoś przed ")" za nazwą klasy. [4 16 C:\Documents and Settings...\Pulpit\mystring.cpp [Error] expected unqualified-id before ')' token ]

Ponadto proszę o rzucenie okiem i rady stricte merytoryczne - chciałabym pisać i rozumieć co piszę a nie pisać i kombinować.

oto klasa (mystring.cpp):

 #include <stdio.h>
#include <string.h>

class mystring(){
      private:
      char *str;
int dlugosc(const char *src)
{
    int size=0;
    while(*src++)
     size++;
    return size;
}
        mystring exception();
      public:
 mystring()
{
    str=NULL;
}

 ~mystring()
{
        delete []this->str;
}

 mystring(const char *s)
{
   if(s)
   {
       str = new char[dlugosc(s)+1];
       copystr(str,s);
   }
   else
   {
        mystring s("Zerowy ciag!");
        throw s;
   }
}
 mystring(const mystring &s)
{
    if(s.str)
    {
        str=new char[dlugosc(s.str)+1];
        copystr(mojstr,s.str);
    }
}

  &mystring operator+ (mystring &s)
{
    char *tab=new char[dlugosc(this->str)+dlugosc(s.str)+1];
    strcpy(tab,this->str);
    unsigned int i=dlugosc(tab);
    unsigned int j=0;
    for(j=0;j<dlugosc(s.str);j++)
       tab[i++]=s.str[j];
    tab[i]=0;
    delete [] str;
    this->str=tab;
    return *this;
}

  &mystring operator= (mystring &s)
{
    delete []str;
    int i=0;
    int j=0;
    char *tab=new char[dlugosc(s.str)+1];
    for(j=0;j<dlugosc(s.mojstr);j++)
       tab[i++]=s.mojstr[j];
    tab[i]=0;
    this->mojstr=tab;
    return *this;
}

  &mystring operator+= (mystring &s)
{
    return *this=*this+s;
}

unsigned int mystring::length()
{
    return dlugosc(this->str);
}
};

Jeśli jest konieczny to także main.cpp:

 #include <iostream>
#include <string.h>
#include <stdio.h>
#include "mystring.cpp"

using namespace std;

int main(){
   mystring a("ala");
    mystring b("ma");
    mystring c("a");
    c=a;
    c.print();
    cin>>c;
    cout<<c<<endl;
    cout<<c.length();
    getchar();
    return 0;
}

Pozdrawiam i przepraszam za psucie nerwów w pierwszy dzień roku. :)

Czy ktoś może mi zaprezentować na przykładzie jednej funkcji jak poprawnie wrzucić do niej wyjątek?

0
class mystring(){

Co to niby jest? Te nawiasy to z d**y wzięte? Czy miały być częścią nazwy klasy? o_O
A jak rzucać wyjątki? Po prostu mieć w pewnych miejscach napisane throw Wyjatek;
Możesz rzucać w zasadzie cokolwiek i łapać cokolwiek. Wygodnie oczywiście napisać jakies klasy wyjątków bo łatwo je potem łapać.

try{
  throw MojWyjatek;
} catch(MojWyjatek ex){
 //obsluga wyjatku
} catch(...){
 //obsluga dowolnego innego wyjatku
}

Możesz też wyspecyfikować jakie wyjątki funkcja moze rzucać. Jak rzuci inny to poleci std::unexpected który ubije program.

void mojaFunkcja() throw (int, double, MojWyjatek){
//
}

taka funkcja może rzucić intem

throw 1;

doublem

throw 1.0;

albo MojWyjatek

throw MojWyjatek(argumenty);
0
&mystring operator+ (mystring &s) 

Ten ampersand przed nazwą typu zwracanego przez funkcję, znajduje się w złym miejscu.

mystring& operator+ (mystring &s) 

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0