C++字符串不起作用

C++ strings not working

本文关键字:不起作用 字符串 C++      更新时间:2023-10-16

我想让这个程序在屏幕上显示"Gianna"Maria"和"M"字符串,但我不能。没有错误,所以我想我的程序有问题。任何建议可以修复我的程序?

#include <iostream>
#include <string>
using namespace std;
class name
{
    string fName, mName, sName;
    public:
        name (string fName, string mName, string sName){};
        void setFName (string fName);
        void setMName (string mName);
        void setSName (string sName);
        string getFName() const {return fName;}
        string getSName() const {return sName;}
        string getMName() const {return mName;}
        friend ostream & operator <<(ostream &, const name &);
};
ostream& operator<<(ostream& os, const name& n) {
    return os << n.fName << " " << n.sName<< " " << n.mName;
}
int main ()
{
    name myName ("Gianna", "Maria", "M");
    cout<<myName.getFName()<<" "<<myName.getMName()<<" "<<myName.getSName()<<endl;

    return 0;
}

你的构造函数:

    name (string fName, string mName, string sName){};

什么都不做。您需要使用这些参数来初始化成员变量。

   name (string f, string m, string s)
         : fName(f), mName(m), sName(s)  {}

你忘了在构造函数中初始化类的 daya 成员。

按以下方式定义构造函数

name( const string &fName, const string &mName, const string &sName )
    : fName( fName ), mName( mName ), sName( sName )
{
}

相应地,这些成员函数应定义如下

    void setFName ( const string &fName)
    {
        this->fName = fName;
    }
    void setMName (const string &mName)
    {
        this->mName = mName;
    }
    void setSName (const string &sName)
    {
        this->sName = sName;
    }

没有必要将operator <<作为类的友元函数。它可以定义为

ostream& operator <<( ostream& os, const name& n ) {
    return os << n.getFName() << " " << n.getMName() << " " << n.getSName();
}

构造函数必须将传递给成员变量的参数赋值,这不会自动发生。

name (string fName, string mName, string sName) : fName(fName), mName(mName), sName(sName) {};

对于构造函数,将三个字符串作为参数,但不会将成员变量设置为其值。您可以在构造函数上使用初始值设定项列表,如下所示...

name (string f, string m, string s) 
    : fName(f), mName(m), sName(s) // member(parameter) format
{
}

。或者您可以实现您拥有的setter存根...

void setFName(string name) { this->fName = name;}

。并在构造函数中使用它们,例如...

name (string fName, string mName, string sName) {
    setFName(fName);
    //...
}

基本上,构造函数中传递的参数会丢失,因为您没有将其分配给类变量。

执行以下操作:

name (string f, string m, string s) : fName(f), mName(m), sName(s){....};

试试这个。你忘了实现类的构造函数

#include <iostream>
#include <string.h>
using namespace std;
class name
{
    string sFName, sMName, sSName;
    public:
        name (string FName, string MName, string SName);
        void Display();
        void setFName (string fName);
        void setMName (string mName);
        void setSName (string sName);
        string getFName() const {return sFName;}
        string getSName() const {return sSName;}
        string getMName() const {return sMName;}
};
name::name(string FName, string MName, string SName )
{
    sFName = FName;
    sMName = MName;
    sSName = SName;
}
void name::setFName(string fName)
{
      sFName = fName;
}
void name::setMName(string mName)
{
      sMName = mName;
}
void name::setSName(string sName)
{
      sSName = sName;
}
void name::Display()
{
    cout<< sFName<< endl;
    cout<< sMName<< endl;
    cout<< sSName<< endl;
}
int main ()
{
    name myName ("Gianna", "Maria", "M");
    myName.Display();

    return 0;
}