初始化将字符串数组作为参数传递
initializing an passing a string array as a parameter
我可以启动一个字符串数组并将其作为初始化它的函数传递吗?我知道这听起来是多余的,但基本上我想启动一个字符串数组,然后将其传递给一个变量,以便以后可以使用它?像这样:
这是 .h:
class ScreenBasics{
void setupAnswers(int &_numberOfAnswers, string *_answersText);
string *answersText;
{
这将是实施.cpp
void ScreenBasics::setupAnswers(int &_numberOfAnswers, string *_answersText){
answersText = _answersText; // this is where I get confused cause I don't know if I should initiate my string pointer using new like answersText = new string(_numberOfAnswers);
{
所以总的来说.cpp我可以做这样的事情:
int main( ) {
ScreenBasics basics;
int numberOfAnswers = 4;
string newAnswers [] = { "Good", "Superb", "Great", "Perfect"};
basics.setupAnswers(numberOfAnswers, newAnswers);
// let's say I want to call some of those answers later
for ( int i = 0; i < numberOfAnswers; i++){
cout << basics.answersText[i] << endl;
}
}
谢谢!
你对
使用结构体有没有兴趣?类和结构都可以混合使用公共和私有成员,可以使用继承,并且可以具有成员函数。我建议将结构用作没有任何类类特征的普通旧数据结构,并使用类作为具有私有数据和成员函数的聚合数据结构。
您的代码如下所示:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct movies_t {
string title;
int year;
} mine, yours;
int main ()
{
string mystr;
mine.title = "2001 A Space Odyssey";
mine.year = 1968;
cout << "Enter title: ";
getline (cin,yours.title);
cout << "Enter year: ";
getline (cin,mystr);
stringstream(mystr) >> yours.year;
cout << "My favorite movie is:n ";
printmovie (mine);
cout << "And yours is:n ";
printmovie (yours);
return 0;
}
void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year << ")n";
}
如果您有任何问题,请告诉我!
听起来
你的类应该使用构造函数来初始化指针。
class ScreenBasics
{
ScreenBasics(std::string* _answersText, std::size_t size)
: answersText(new std::string[size])
{
// copy values from _answersText to answersText
}
};
请注意,由于您是动态分配资源的,因此您需要实现三法则:也就是说,您需要创建一个复制构造函数、复制赋值运算符和析构函数。这是因为它们的默认实现在语义上不符合我们的要求。例如,默认的复制构造函数和复制赋值运算符执行浅层复制(即,它们复制指针,但不复制指针指向的内容(。此外,析构函数不会释放分配给我new[]
的内存。您需要提供自己的调用 delete[]
的析构函数的定义。
幸运的是,所有这些都可以通过使用标准库容器std::vector
来避免,这是一个为您处理内存分配的动态数组类。如果需要,上述构造函数的默认实现将正确复制/复制赋值向量:
class ScreenBasics
{
ScreenBasics(std:vector<std::string> _answersText)
: answersText(_answersText)
{
}
};
请注意,大小也不必作为参数传递。向量在内部保持其大小。
相关文章:
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 如何在模板函数中实例化其长度使用模板参数的数组
- 基于参数创建数组
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 在 c++ 中使用模板传递数组时出现问题
- Pybind11 默认参数 numpy 数组或 None
- 传递数组结构、ofstream 和 interger 以运行
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 在C++中传递数组作为函数参数的方法
- 函数参数绑定通过参考与传递指针传递数组的规则
- 如果数组变量在 c# 代码中定义为“ref”参数,则如何传递数组变量
- 你究竟如何通过函数的参数传递数组?
- c++ 传递数组而不是可变长度参数列表
- 如何在我的实际参数中通过引用传递数组
- 如何在函数C++中传递数组成员作为参数
- 在函数中传递数组作为引用参数
- 通过引用传递数组参数
- 在c++中传递数组作为函数参数
- 如何在构造函数中传递数组作为参数?c++
- 为什么编译器不在参数中传递数组字符 *arr[] 的大小?