首页 > 试题广场 >

找出并改正下述类声明中的错误: class nifty {

[问答题]
找出并改正下述类声明中的错误:
class nifty
{
// data
     char personality[];
     int talents;
// methods
     nifty();
     nifty(char * s);
     ostream & operator<<(ostream & os, nifty & n);
}
nifty:nifty[]
{
      personality = NULL;
      talents = 0;
}
nifty:nifty(char * s)
{
     personality = new char [strlen(s)];
     personlaity = s;
     talents = 0;
}
ostream & nifty:operator<<(ostream & os, nifty & n)
{
       os << n;
}


推荐
应将personality成员声明为字符数组或car指针,或者将其声明为String对象或string对象。该声明没有将方法设置为公有的,因此会有几个小错误。下面是一种可能的解决方法,修改的地方以粗体显示:
#include <iostream>
#include <cstring>
using namespace std;
class nifty
{
private: // optional
     char personality[40];       // provide array size
     int talents;
public: // needed
// methods
    nifty();
    nifty(const char * s);
    friend ostream & operator<<(ostream & os, const nifty & n);
};     // note closing semicolon
nifty::nifty()
{
     personality[0] = '\0';
     talents = 0;
}
nifty::nifty(const char * s)
{
     strcpy(personality, s);
     talents = 0;
}
ostream & operator<<(ostream & os, const nifty & n)
{
        os << n.personality << '\n';
        os << n.talent << '\n';
        return os;
}
下面是另一种解决方案:
#include <iostream>
#include <cstring>
using namespace std;
class nifty
{
private: // optional
     char * personality;     // create a pointer
     int talents;
public: // needed
// methods
      nifty();
      nifty(const char * s);
      nifty(const nifty & n);
      -nifty()  { delete [] personality; }
      nifty & operator=(const nifty & n) const;
      friend ostream & operator<<(ostream & os, const nifty & n);
};          // note closing semicolon
nifty::nifty()
{
     personality = NULL;
     talents = 0;
}
nifty::nifty(const char * s)
{
     personality = new char [strlen(s) + 1];
     strcpy(personality, s);
     talents = 0;
}
ostream & operator<<(ostream & os, const nifty & n)
{
      os << n.personality << '\n';
      os << n.talent << '\n';
      return os;
}


发表于 2018-05-08 08:47:20 回复(0)