检查输入的有效性 - Setter功能

时间:2015-09-01 04:25:57

标签: c++ class setter getter-setter

这是一个大学项目的练习,目前正在研究面向对象的编程,我对此很新。

我有一个类Publication,其中包含属性HeadlineText。 这是类的代码(头文件)

#include <iostream>
#include <string>

using namespace std;
using std::string;

class publication
{
    private:
        string headline,text;
    public:
        publication(); //constructor

        void set_headline(string const new_headline);
        void set_text(string const new_text);

        string get_headline();
        string get_text();

        void print();
}

这是实现(.cpp文件)

#include <iostream>
#include <string>
#include "publication.h"

using namespace std;
using std::string;

publication::publication()
{
    publication.headline="";
    publication.text="";
}

void publication::set_headline(string const new_headline)
{
    publication.headline=new_headline; //any input is valid
}

void publication::set_text(string const new_text)
{
    publication.text=new_text; //any input is valid
}

string publication::get_headline()
{
    return publication.headline;
}

string publication::get_text()
{
    return publication.text;
}

到目前为止我没有看到任何问题,如果我错了,请纠正我。

这是我的问题:

我需要定义一个名为Article的新类。 ArticlePublication的一种类型,因此它继承了它,但它也有一个独特的字段Author

以下是Article类(头文件)

的代码
#include <iostream>
#include <string>
#include "publication.h"

using namespace std;
using std::string;

class article: public publication
{
    private:
        string author;
    public:
        article();

        void set_author(string const new_author);

        string get_author();
}

这是实现(.cpp文件)

#include <iostream>
#include <string>
#include "article.h"

using namespace std;
using std::string;

article::article()
{
    article.author="";
    article.set_headline("");
    article.set_text("");
}

void article::set_author(string const new_author)
{
    article.author=new_author;
}

string article::get_author()
{
    return article.author;
}

这是我的问题:

set_author方法中,我想检查输入是否有效。据我所知,没有名为123的人或名为Bob%^!@的人。有没有办法检查字符串是否包含不是字母的字符?

1 个答案:

答案 0 :(得分:1)

首先让我指出一些我发现的问题。

在类构造函数和setter中,不使用点分隔符为成员数据分配新值。

如果您有publication.headline="";,则可以headline = "";。这适用于您在其自己的类中使用成员数据的所有情况,因此它也适用于您的article类。

其次,在你的article课程中。您设置.h文件以进行继承的方式是正确的;但是,在构造函数的.cpp中,您必须将publication构造函数扩展到article构造函数,如此...

article::article() : publication()
{
    ....
}

: publication()是对super班级构造函数的调用,如果没有它,headlinetext数据成员将无法初始化

const变量的常见做法是以这种方式编写:const <data-type> <variable-name>,所以如果你有string const new_author或其他任何类型,只需切换到const string new_author

现在,至于以你所说的方式验证你的输入,你可以使用我所知道的两种不同的方法。一个使用isalpha()方法,另一个使用ASCII表来检查每个字符的值。

ASCII方法...通过每个字符的简单迭代器,并检查值是否介于65和90或97和122之间...(请参阅ascii表格获取帮助)。对于此示例,我将使用名为name的变量作为输入字符串变量。

for (int i = 0; i < strlen(name); i++)
{
    if ((int(name[i]) >= 65 && int(name[i]) <= 90) 
         || (int(name[i]) >= 97 && int(name[i]) <= 122))
    {
        ...the character is A-Z or a-z...
    }
}

功能方法......

for (int i = 0; i < strlen(name); i++)
{
    if (!(isalpha(name[i])))
    {
        ...the character is only A-Z or a-z...
    }
}

我希望这有帮助!快乐的节目!