クラス継承を使ってCaesar Cipherを使ったプログラムを作ろうとしています が、フレンド演算子でgetlineが使えません。getline をオーバーロードするさまざまな方法を調べてみましたが、何が間違っているのかわかりません (最近名前空間 std の使用をやめたので、おそらくいくつかのエラーがあるでしょう)。
それはまだ進行中の作業です。長さが必要かどうか、またはオーバーロードされた + 演算子が実際に古い文字列に余分な単語を追加するかどうかはわかりません (後で理解できますが、ここで getline を適切に使用する方法を知りたいだけです)。 )。どんな助けでも大歓迎です。
#include <iostream>
#include <string>
class Sentence{
private:
std::string codeSentence;
int length;
public:
Sentence();
Sentence(std::string codeSentence);
Sentence(const Sentence &obj);
~Sentence();
void setS (std::string codeSentence);
std::string getS() const;
Sentence & operator = (const Sentence &obj);
Sentence operator +(const Sentence &obj) const;
Sentence operator +(std::string codeSentence) const;
friend Sentence operator +(std::string codeSentence, const Sentence &obj);
friend std::ostream & operator << (std::ostream & out, const Sentence &obj);
friend std::istream & operator >> (std::istream & in, Sentence &obj);
friend std::istream & getline (std::istream & in, const Sentence & obj);
};
Sentence::Sentence(){
}
Sentence::Sentence(const Sentence &obj){
(*this) = obj;
}
Sentence::Sentence(std::string codeSentence){
this->codeSentence = codeSentence;
}
Sentence::~Sentence(){
}
void Sentence::setS(std::string codeSentence){
this->codeSentence = codeSentence;
}
std::string Sentence::getS() const{
return (this-> codeSentence);
}
Sentence & Sentence::operator=(const Sentence &obj){
this->codeSentence = obj.codeSentence;
return (*this);
}
Sentence Sentence::operator+(const Sentence &obj) const{
return (Sentence(this->codeSentence + ' ' + obj.codeSentence));
}
Sentence Sentence::operator+(std::string codeSentence) const{
return (Sentence(this->codeSentence + ' ' + codeSentence));
}
Sentence operator+(std::string codeSentence, const Sentence &obj){
return (Sentence(codeSentence + ' ' + obj.codeSentence));
}
std::istream & getline (std::istream & in, const Sentence & obj){
if (in >> obj.length)
getline(in, obj.codeSentence);
return (in);
}
std::istream & operator >> (std::istream & in, Sentence &obj){
in.getline(obj.codeSentence, sizeof(obj.codeSentence));
return (in);
}