C Suggestions: Code Examples
Figure 1. Partial definition of an OutQ class
class OutQ {
OUTQ * hOutQ; // Handle for output queue
public:
OutQ(char * outqname) {// Constructor
hOutQ = open_outq(outqname);
}
const char * nextname() {
OUTQ_ENTRY * tmp_qentry = next_outq_entry(hOutQ);
return (tmp_qentry ? tmp_qentry->ofile_name : NULL);
}
};
Figure 2. Revised OutQ class
class OutQ {
OUTQ * hOutQ; // Handle for output queue
char HoldName[NAMESIZE];
public:
OutQ(char * outqname) { // Constructor
hOutQ = open_outq(outqname);
}
const char * nextname() {
OUTQ_ENTRY * tmp_qentry = next_outq_entry(hOutQ);
if (! tmp_qentry ) return NULL;
strcpy(HoldName, tmp_qentry->ofile_name);
return HoldName;
}
};
Figure 3. Partial definition of a String class
class String {
char * strdata;
int strlength;
public:
String(char * cs); // Constructor using standard
String& operator=(const String& ss); // Assignment
};
c
har * MakeString(const char * cs) {
char * tmpstr = new char[strlen(cs) + 1];
strcpy(tmpstr, cs);
return tmpstr;
}
String::String(char * cs) {
strdata = cs ? MakeString(cs) : NULL;
strlength = cs ? strlen(cs) : 0;
}
String& String::operator=(const String& ss) {
delete [] strdata;
strdata = ss.strdata ? MakeString(ss.strdata) : NULL;
strlength = ss.strdata ? ss.strlength : 0;
return * this;
}
Figure 4. Revised operator= member function
String& String::operator=(const String& ss) {
if (this != &ss) { // Source is not same as target
delete [] strdata;
strdata = ss.strdata ? MakeString(ss.strdata) : NULL;
strlength = ss.strdata ? ss.strlength : 0;
}
return * this;
}