如果在类c ++中没有定义方法,如何在类对象上使用方法

时间:2016-04-21 05:43:13

标签: c++ class c++11 methods parameters

我上课class Pstring { private: string palindrome; public: Pstring() { palindrome = ""; } Pstring(string pal) { setString(pal); } void setString(string pal) { palindrome = pal; } string getPal() const { return palindrome; } };

Pstring palindrome(palin)

定义的主方法 string palin = ""; cout << "Enter a palindrome:\n"; getline(cin, palin); Pstring palindrome(palin); 中的对象
bool isPalindrome(string pal)

和当前测试方法bool isPalindrome(string pal) { bool flag; cout << "Do I have access to this?"; cout << pal; //code goes here to check for palindrome, return bool } 定义为

palindrome.isPalinedrome(palin);

我希望我的Pstring类对象palindrome在main中使用方法isPalindrome,但是当我尝试使用c_id c_name status p_id created_at 1 john 1 79 2016-04-13 10:36:44 2 smith 1 79 2016-04-13 14:25:57 3 phil 1 76 2016-04-18 18:06:21 4 leo 1 76 2016-04-18 15:51:41 5 craig 1 79 2016-04-20 10:44:17 ... 调用该方法时,它似乎无法访问该方法。

如果允许类外的方法被main中的类对象使用,我该怎么办?

4 个答案:

答案 0 :(得分:1)

您没有在isPalinedrome()课程中定义Pstring方法,因此您无法在主代码中将其称为palindrome.isPalinedrome()

不应让Pstring尝试在主代码中调用函数,而应将回文逻辑移至Pstring,然后主代码可在需要时询问Pstring。 / p>

试试这个:

class Pstring
{
private:
   string value;

public:
   Pstring() { }
   Pstring(const string &s) { setString(s); }
   void setString(const string &s) { value = s; }
   string getString() const { return value; }

   // add this...
   bool isPalindrome() const {
      //code goes here to check value for palindrome, return bool
   }
};

然后您的主要代码可以执行此操作:

bool isPalindrome(const string &value)
{
   Pstring palindrome(value);
   return palindrome.isPalindrome();

   // or simply:
   // return Pstring(value).isPalindrome();
}

int main()
{
   string palin;

   cout << "Enter a palindrome:\n";
   getline(cin, palin);

   if (isPalindrome(palin)) {
      // do something ...
   } else {
      // do something else...
   }

   return 0;
}

或者这个:

int main()
{
   string palin;

   cout << "Enter a palindrome:\n";
   getline(cin, palin);

   Pstring palindrome(palin);
   if (palindrome.isPalindrome()) {
      // do something ...
   } else {
      // do something else...
   }

   return 0;
}

答案 1 :(得分:1)

您应该将测试方法添加到课程中:

class Pstring
{
private:
   string palindrome;

public:
   // you don't need to initialize palindrome = "" (it's initialized by default)
   Pstring() {}

   // always pass strings as const reference unless you have
   // special reason to do it another way...
   Pstring(const string&  pal) { setString(pal); }
   void setString(const string& pal) { palindrome = pal; }
   string getPal() const { return palindrome; }

   bool isPalindrome() const // you don't have to pass string
   {
      bool flag; 

      cout << "Do I have access to this?";
      cout << palindrome; // please note this 

     //code goes here to check for palindrome, return bool

   }

};

还请注意错字: palindrome.isPalin的ë综合征(帕林);

答案 2 :(得分:0)

您可以使用函数指针来实现它:

宣布课程:

class Pstring{
private:
    string palindrome;
public:
    Pstring() { palindrome = ""; }
    Pstring(string pal) { setString(pal); }
    void setString(string pal) { palindrome = pal; }
    string getPal() const { return palindrome; }
    //add a function pointer member:
    bool(*isPalindrome) (string);
};

然后定义函数:

 bool isPalindrome(string pal)
{
    bool flag;
    cout << "Do I have access to this?";
    cout << pal;

    //code goes here to check for palindrome, return bool
    return true;
}

现在你可以在main函数中编写代码:

string palin = "";

cout << "Enter a palindrome:\n";
getline(cin, palin);

Pstring palindrome(palin);
palindrome.isPalindrome = isPalindrome;//bind function

您现在可以使用该对象的功能:

palindrome.isPalindrome(palin);

答案 3 :(得分:0)

对不起。创建这门课的重点是什么?你唯一需要的是辅助函数isPalindrome(const std :: string&amp;)。如果您需要某种范围保护,将其放入命名空间可能看起来更好

很抱歉,但我不得不说你只是让事情变得复杂。

C ++不是java。如果你不使用它,你不应该付钱。