Code: Alles auswählen
sKa = sKb + "A" + "B" + "C"; //> OK:
sKa = "A" + sKb + "B" + "C"; //> Funktioniert nicht:Code: Alles auswählen
sKa = sKb + "A" + "B" + "C"; //> OK:
sKa = "A" + sKb + "B" + "C"; //> Funktioniert nicht:Code: Alles auswählen
CKString operator+ (const CKString& a, const CKString& b) {}
Code: Alles auswählen
// Variante 1
class Bla
{
Bla operator + (const Bla& dasAndereBla) const;
}
// ist gleichwertig mit einem freien Operator der Art
Bla operator + (const Bla& dasEineBla, const Bla& dasAndereBla);
Code: Alles auswählen
//> *.h, nach der Klassendeklaration:
//> Freie operatoren:
CKString operator + (const char *cStr, const CKString &sKStr) const;
//> *.cpp, nach der Klassenimplementation:
//> Freie Operatoren:
CKString operator + (const char *cStr, const CKString &sKStr) const
{
string sS(cStr);
sS.append(sKStr.GetcStr());
return sS;
}Code: Alles auswählen
string k_sStr;
const char *CKString::GetcStr(void) const
{
return k_sStr.c_str();
}
string CKString::Format(const CKString &sKStr, ...)
{
const char *pFrm = sKStr.GetcStr();
va_list Argm;
va_start(Argm, pFrm);
k_sStr = KFormatArgmList(pFrm, Argm);
k_iStrLen = k_sStr.length();
va_end(Argm);
return k_sStr;
}
string CKString::Format(const char *pFrm, ...)
{
va_list Argm;
va_start(Argm, pFrm);
k_sStr = KFormatArgmList(pFrm, Argm);
k_iStrLen = k_sStr.length();
va_end(Argm);
return k_sStr;
}
//> Einsatz:
CKString sK1;
CKString sK2 = "\nTest: %0.2f";
sK1.Format(sK2, 100.0); //> Fall1:
sK1.Format(sK2.GetcStr(), 100.0); //> Fall2:
sK1.Format("\nTest: %0.2f", 100.0); //> Fall3pFrm und Argm unbedingt Funktionsparameter sein müssen?k_sStr = KFormatArgmList(pFrm, Argm);
Code: Alles auswählen
va_start(Argm, pFrm); // sollte wohl eher sKStr anstelle von pFrm sein
Code: Alles auswählen
class CKString
{
public:
CKString(void);
CKString(const CKString &sKStr);
CKString(const string &sStr);
CKString(const char *cStr);
virtual ~CKString(void);
// ...
int Compare(const CKString &sKStr) const;
//> int Compare(const string &sStr) const;
//> int Compare(const char *cStr) const;
// oder
bool operator == (const CKString &sKStr) const;
//> bool operator == (const string &sStr) const;
//> bool operator == (const char *cStr) const;
// ...
};Code: Alles auswählen
CKString s;
bool b = s == "Hi!";
Tschuldigung, aber ich verstehe jetzt erst die Zusammenhänge .. der Worte hab' ich wohl vernommen, aber der Sinn ist nicht vorbeigekommen ..Was mich aergert ..
Code: Alles auswählen
//.. aus der stdafx.h:
//>
//> Grafik-Methoden:
//>
#define ZWIANER_DDRAW "DirectXDDraw"
//> #define ZWIANER_WIN32OPENGL "Win32OpengGL"
//> #define ZWIANER_WIN32SDL "Win32SDL"
//.. aus der main.cpp:
CKDDraw *g_pKDDraw = (CKDDraw *)NULL;
CKOpenGL *g_pKOpenGL = (CKOpenGL *)NULL;
CKSDL *g_pKSDL = (CKSDL *)NULL;
#ifdef ZWIANER_DDRAW
CKDDraw *GetgpKGrafik(void)
{
return g_pKDDraw;
}
void DeleteKGrafik(void)
{
delete g_pKDDraw;
g_pKDDraw = NULL;
}
#else
#ifdef ZWIANER_WIN32OPENGL
CKOpenGL *GetgpKGrafik(void)
{
return g_pKOpenGL;
}
void DeleteKGrafik(void)
{
delete g_pKOpenGL;
g_pKOpenGL = NULL;
}
#else
#ifdef ZWIANER_WIN32SDL
CKSDL *GetgpKGrafik(void)
{
return g_pKSDL;
}
void DeleteKGrafik(void)
{
delete g_pKSDL;
g_pKSDL = NULL;
}
#endif
#endif
#endif
//..
int APIENTRY _tWinMain
(
HINSTANCE hInst,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow
)
{
//..
#ifdef ZWIANER_WIN32SDL
g_pKSDL = new CKSDL
(
hInst,
SDL_INIT_VIDEO,
g_bHgAlt
);
if (g_pKSDL != NULL)
{
g_hInst = g_pKSDL->GethInst();
g_hWnd = g_pKSDL->GethWnd();
}
#else
#ifdef ZWIANER_WIN32OPENGL
g_pKOpenGL = new CKOpenGL
(
hInst,
800,
600,
WndProc,
g_bHgAlt,
1
);
if (g_pKOpenGL != NULL)
{
g_hInst = g_pKOpenGL->GethInst();
g_hWnd = g_pKOpenGL->GethWnd();
}
#else
g_pKDDraw = new CKDDraw
(
hInst,
nCmdShow,
g_iPix,
g_bHgAlt,
WndProc,
1
);
if (g_pKDDraw != NULL)
{
g_hInst = g_pKDDraw->GethInst();
g_hWnd = g_pKDDraw->GethWnd();
}
#endif
#endif
if
(
(GetgpKGrafik() != NULL)
&&
(GetgpKGrafik()->GetbAllesOK() == true)
//..
//..Google - Erster und zweiter Hit.HeinzK hat geschrieben:2. Das Fenster öffnet sich Kaskadenartig immer an einer anderen Position. Läßt sich das schon beim Anlegen irgendwie beeinflussen?
Hm, wieso braucht man eine KString und KVector Klasse, um plattformunabhängig zu sein? Was ist mit den Containern aus der STL?HeinzK hat geschrieben:Als Vorbereitung für Linux sind die neuen Klassen aktiv: KString, KFile, KZeit, KZeichnen, KPixeln, KVector.
Es fehlt eigentlich nur noch als Fleißarbeit der Umbau der restlichen CPtrList, CPtrMap und Co's. Dann brauch'
ich nur noch einen Ersatz für DDInput und DDSound .. und .. ZwiAner läuft auch auf Linux!