这是一个大学项目的练习,目前正在研究面向对象的编程,我对此很新。
我有一个类Publication
,其中包含属性Headline
和Text
。
这是类的代码(头文件)
#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
的新类。 Article
是Publication
的一种类型,因此它继承了它,但它也有一个独特的字段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%^!@
的人。有没有办法检查字符串是否包含不是字母的字符?
答案 0 :(得分:1)
首先让我指出一些我发现的问题。
在类构造函数和setter中,不使用点分隔符为成员数据分配新值。
如果您有publication.headline="";
,则可以headline = "";
。这适用于您在其自己的类中使用成员数据的所有情况,因此它也适用于您的article
类。
其次,在你的article
课程中。您设置.h文件以进行继承的方式是正确的;但是,在构造函数的.cpp中,您必须将publication
构造函数扩展到article
构造函数,如此...
article::article() : publication()
{
....
}
: publication()
是对super
班级构造函数的调用,如果没有它,headline
和text
数据成员将无法初始化
此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...
}
}
我希望这有帮助!快乐的节目!