[ FantasticFour @ 15.05.2011. 08:46 ] @
Dugo ni ja nisam postavljao pitanja ovde pa ajd malo :) .

Pokusavam da napravim custom string klasu u c++ koja ce naslediti normani std::string

ali imam problem :(

kada pokusam kompajlirati dobijem

main.cpp: In function 'int main()':
main.cpp:8: error: conversion from 'const char [6]' to non-scalar type 'Stefy::String' requested
ovo je main.cpp
[CODE]
#include "/usr/include/sct/stefy_string.h"
#include <iostream>

using namespace std;
int main() {
Stefy::String s;
cin >> s;
Stefy::String t = "stefy";
if (s.contains(t))
cout << "EXTRA\n";
return 0;
}

[/CODE]

sct/stefy_string.h

[CODE]
#ifndef STEFY_STRING_H
#define STEFY_STRING_H

//#include <string>
#include "stefy_stdlib.h"

//namespace Stefy {
STEFY_NAMESPACE_BEGIN
class String : public std::string
{

public:
bool starts_with(std::string w);
bool ends_with(std::string w);
int diff(Stefy::String other);
int diff(const std::string& other);
bool contains(Stefy::String t);
//bool contains(std::string t);
};
//}
STEFY_NAMESPACE_END


#endif //STEFY_STRING_H

[/CODE]

i sct/stefy_string.cpp

[CODE]
#include "stefy_string.h"

bool Stefy::String::starts_with(std::string w)
{
return substr(0, w.size()) == w;
}

bool Stefy::String::ends_with(std::string w)
{
return substr(size() - w.size(), w.size()) == w;
}

int Stefy::String::diff(Stefy::String other)
{
Stefy::String c = other;
int min_size = 0;
int max_size = 0;
if (size() < c.size()) {
min_size = size();
max_size = c.size();
}
else {
min_size = c.size();
max_size = size();
}

int e = max_size - min_size;

for (int i = 0; i<min_size; i++)
{
if (at(i) != c.at(i))
e++;
}
return e;
}


/*int Stefy::String::diff(const std::string& other)
{
Stefy::String c = other;
int min_size = 0;
int max_size = 0;
if (size() < c.size()) {
min_size = size();
max_size = c.size();
}
else {
min_size = c.size();
max_size = size();
}

int e = max_size - min_size;

for (int i = 0; i<min_size; i++)
{
if (at(i) != c.at(i))
e++;
}
return e;
}*/

bool Stefy::String::contains(Stefy::String t)
{
std::string o = t.c_str();
int s = o.size();

for (int i = 0; i + s <= size(); i++)
{
if (substr(i, s) == o)
{
return true;
}
}

return false;
}


/*bool Stefy::String::contains(std::string t)
{
int s = t.size();

for (int i = 0; i + s <= size(); i++)
{
if (substr(i, s) == t)
{
return true;
}
}

return false;
}*/

[/CODE]

u cemu je problem ????
[ karas @ 15.05.2011. 13:03 ] @
Programer koji nije pravio svoju string klasu u C++ i nije stvarno programirao.:-D
Ajde stavi kod koji radi, sta ti je npr. fajl stefy_stdlib.h? Ovako sto mi prvo pada na pamet je da ne moze da pozove konstruktor za const char*.
[ Nedeljko @ 15.05.2011. 15:02 ] @
Pa, naravno da ne može kad ga i nema.
[ karas @ 15.05.2011. 15:38 ] @
Sto ce reci da bi mogao da ubaci takav konstruktor koji bi samo pozvao std::string(const char*). Ne bi bilo lose da to uradi za ostale.
[ kiklop74 @ 15.05.2011. 17:16 ] @
Klase standardne c++ biblioteke generalno nisu dizajnirane za nasledjivanje (ima izuzetaka). Zato nijedna nema virtualni destruktor.

Videti o tome ovde:

http://www.parashift.com/c++-faq-lite/virtual-functions.html

[20.7] When should my destructor be virtual?

Citat:

...
In particular, here's when you need to make your destructor virtual:

if someone will derive from your class,
and if someone will say new Derived, where Derived is derived from your class,
and if someone will say delete p, where the actual object's type is Derived but the pointer p's type is your class.
....


A i ovo:

http://en.allexperts.com/q/C-1...ssible-inherit-classes-STL.htm

Naravno ti i dalje mozes to da uradis i u vecini slucajeva ce da radi ali ipak je bolja cista situacija.
[ FantasticFour @ 15.05.2011. 18:43 ] @
Hvala svima na odgovorima.

Hehehehehe tek sad sam primetio da nemam konstruktor :D .

Znaci kad nasledjujem klasu neku ne nasledjuju se konstruktori i desktruktori vec samo funkcije :) Eto to nisam znao i danas sam nesto novo naucio :) ....

Inace izvinjavam se za los prvi posto sto se koda tice.
[ Mihajlo Cvetanović @ 16.05.2011. 09:31 ] @
Koja ti tačno funkcionalnost nedostaje u std::string?
[ karas @ 16.05.2011. 10:53 ] @
@FantasticFour
http://www.cplusplus.com/doc/tutorial/inheritance/ odeljak What is inherited from the base class?