C Language

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;
 }

by BrainBellupdated
Advertisement: