是否可以为类提供特定的返回类型?
例如,我想创建一个名为Sentence
的类,它基本上是vector
个字符串。那么它是否可以定义它以使它具有vector
字符串的返回值(假设向量/数组可以是返回值)?
编辑:我现在很累,所以请原谅我糟糕的描述。我的意思是设置它以便您可以返回类,它将返回类中的特定变量。所以我基本上会创建一个Sentence
类,就编译器而言,它是一个vector
字符串,只是添加了一些函数。这样,如果我告诉函数{{1它将返回对象内的字符串向量。
答案 0 :(得分:1)
一个类是一种类型。它用于定义对象;所以它不会返回任何东西。
但是,您可以定义转换运算符,以便将该类型的对象轻松转换为另一种对象。
示例:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Sentence {
vector<string> words;
public:
Sentence() : words{} {} // construct an empty sentence
void add(string word) { // add a new word to the sentence
words.push_back(word);
}
operator vector<string> () { // convert into a vector of string
return words;
}
};
使用这样的转换运算符,您可以编写如下代码:
int main() {
Sentence statement; // create a sencence
statement.add("hello");
statement.add("word");
vector<string> w = statement; // convert the sentence into a vector
for (auto& x : w) cout <<x<<" "; // print the vector elements
cout <<endl;
return 0;
}
您可以为不同的目标类型设置不同的转换运算符。例如,您可以将此类添加到类中:
operator string() { // conversion to string
string r{};
for (auto x=words.begin(); x!=words.end(); r+=" ")
r += *x++;
return r;
}
然后您可以按如下方式使用它:
string s = statement; // convert the Sentence into a string
cout<<s<<endl;
<强> Online demo 强>
答案 1 :(得分:1)
也许你想要conversion operator:
#include <iostream>
#include <string>
#include <vector>
#include <initializer_list>
class Sentence
{
private:
std::vector<std::string> words;
public:
Sentence(std::initializer_list<std::string> l) : words{ l } {}
operator std::vector<std::string>() // conversion operator
{
return words;
}
};
int main()
{
Sentence sentence {"hello", "world", "this", "is", "a", "test"};
std::vector<std::string> arr = sentence; //indicate that you want it to be treated as array
for (auto word : arr)
std::cout << word << std::endl;
return 0;
}