These are sources that work:
MyString.h
#pragma once
class CMyString {
public:
CMyString();
CMyString(const CMyString &rhs);
CMyString(const char* param);
~CMyString();
private:
char* m_pszData;
int m_nLength;
public:
int setString(const char* pszParam);
const char* getString() const;
void release();
CMyString& operator=(const CMyString &rhs);
operator char*() const;
};
MyString.cpp
#include "MyString.h"
#include <iostream>
#include <cstring>
CMyString::CMyString() : m_pszData(NULL), m_nLength(0) {
}
CMyString::CMyString (const CMyString &rhs) : m_pszData(NULL), m_nLength(0) {
this->setString(rhs.getString());
}
CMyString::CMyString (const char* pszParam) : m_pszData(NULL), m_nLength(0) {
setString(pszParam);
}
CMyString::~CMyString() {
release();
}
int CMyString::setString(const char* pszParam) {
release();
if(pszParam == NULL)
return 0;
m_nLength = strlen(pszParam);
if(m_nLength == 0)
return 0;
m_pszData = new char[m_nLength + 1];
strncpy(m_pszData, pszParam, m_nLength);
return m_nLength;
}
const char* CMyString::getString() const {
return m_pszData;
}
void CMyString::release() {
if(m_pszData != NULL)
delete[] m_pszData;
m_pszData = NULL;
m_nLength = 0;
}
CMyString &CMyString::operator = (const CMyString &rhs) {
if(this != &rhs)
this->setString(rhs.getString());
return *this;
}
CMyString::operator char*() const { return m_pszData; }
StringCtrlSample.cpp
#include "MyString.h"
#include <iostream>
using namespace std;
void testFunc(const CMyString &strParam) {
cout << strParam << endl;
}
int main(int argc, char *argv[]) {
CMyString strData("Hello");
cout << strData.getString() << endl;
::testFunc(strData);
::testFunc(CMyString("World"));
return 0;
}
I tried operator overloading about char*() without "const" keyword at MyString.h and MyString.cpp but printed error at compiling. ex) operator char*();
Can someone explain me the difference about adding "const" keyword at the end of char*()?