如何在不同的文件中初始化私有变量并使其保存其他函数的值?
How to initialize private variables in a different file and make it so it holds the value for other functions?
我只需要知道如何让大小、索引和计数器在另一个函数中被调用时保持它们的值。现在,它们只是在被调用时被赋予随机值,而不是我在构造函数中初始化它们的值。我怎样才能解决这个问题?此代码的 objective 是制作一个程序,从程序用户(通过键盘)捕获一串单词并添加输入的
单词到动态字符串数组。
这是 array.cpp 文件
#include "array.h"
using namespace std;
Array::Array()
{
int size = 100;
int index = 0;
int counter = 0;
counter ++;
index++;
string *ptr = new string[size];
}
Array::~Array()
{
delete ptr;
ptr = nullptr;
}
void Array::populate()
{
string word;
cout << "Enter word to add to array: ";
cin >> word;
ptr[index] = word;
}
void Array::printContent()
{
cout << "Number of words in array: " << counter << endl;
cout << "Array size: " << size << endl;
cout << "Words in array: " << endl;
for (int i = 0; i < counter; i++)
{
cout << ptr[i] << endl;
}
}
void Array::displayMenu() const
{
cout << "[1] Add Word\n"
<< "[2] Print Array Information\n"
<< "[3] Quit Program\n"
<< "Enter Choice: ";
}
int Array::getChoice(int & choice1)
{
cin >> choice1;
while (choice1 < 1 || choice1 > 3) {
cout << endl;
cout << "Invalid Entry!!" << endl;
cout << "Enter Choice: ";
cin >> choice1;
}
return choice1;
}
int Array::endProgram(int & start2)
{
start2 = 0;
cout << "\n\n\t\tThank you for using this system!!\n\n";
return start2;
}
这是 array.h 文件
#include <iostream>
#include <string>
using namespace std;
class Array {
public:
Array();
~Array();
void populate();
void printContent();
void displayMenu() const;
int getChoice(int & choice1);
int endProgram(int & start2);
private:
int size;
int index;
int counter;
string *ptr;
};
最后这是 main.cpp 文件
#include <iostream>
#include "array.h"
using namespace std;
int main() {
int choice = 0;
int start = 1;
Array theArray;
while(choice != 3)
{
theArray.displayMenu();
theArray.getChoice(choice);
if(choice == 1)
{
theArray.populate();
}
if(choice == 2)
{
theArray.printContent();
}
if (choice == 3)
{
theArray.endProgram(start);
}
}
}
您正在 Array
构造函数中定义新的局部变量并隐藏同名的成员变量 -- 这就是为什么不保留该值的原因。
你只需要在定义新变量时指定类型,而不是在分配给现有变量时。要分配给成员变量,这应该是:
Array::Array()
{
size = 100;
index = 0;
counter = 0;
ptr = new string[size];
...
}
此外,在构造函数中使用构造函数初始化列表来初始化值更正确:
Array::Array()
: size{100},
index{0},
counter{0},
ptr{new string[size]}
{
...
}
我只需要知道如何让大小、索引和计数器在另一个函数中被调用时保持它们的值。现在,它们只是在被调用时被赋予随机值,而不是我在构造函数中初始化它们的值。我怎样才能解决这个问题?此代码的 objective 是制作一个程序,从程序用户(通过键盘)捕获一串单词并添加输入的 单词到动态字符串数组。 这是 array.cpp 文件
#include "array.h"
using namespace std;
Array::Array()
{
int size = 100;
int index = 0;
int counter = 0;
counter ++;
index++;
string *ptr = new string[size];
}
Array::~Array()
{
delete ptr;
ptr = nullptr;
}
void Array::populate()
{
string word;
cout << "Enter word to add to array: ";
cin >> word;
ptr[index] = word;
}
void Array::printContent()
{
cout << "Number of words in array: " << counter << endl;
cout << "Array size: " << size << endl;
cout << "Words in array: " << endl;
for (int i = 0; i < counter; i++)
{
cout << ptr[i] << endl;
}
}
void Array::displayMenu() const
{
cout << "[1] Add Word\n"
<< "[2] Print Array Information\n"
<< "[3] Quit Program\n"
<< "Enter Choice: ";
}
int Array::getChoice(int & choice1)
{
cin >> choice1;
while (choice1 < 1 || choice1 > 3) {
cout << endl;
cout << "Invalid Entry!!" << endl;
cout << "Enter Choice: ";
cin >> choice1;
}
return choice1;
}
int Array::endProgram(int & start2)
{
start2 = 0;
cout << "\n\n\t\tThank you for using this system!!\n\n";
return start2;
}
这是 array.h 文件
#include <iostream>
#include <string>
using namespace std;
class Array {
public:
Array();
~Array();
void populate();
void printContent();
void displayMenu() const;
int getChoice(int & choice1);
int endProgram(int & start2);
private:
int size;
int index;
int counter;
string *ptr;
};
最后这是 main.cpp 文件
#include <iostream>
#include "array.h"
using namespace std;
int main() {
int choice = 0;
int start = 1;
Array theArray;
while(choice != 3)
{
theArray.displayMenu();
theArray.getChoice(choice);
if(choice == 1)
{
theArray.populate();
}
if(choice == 2)
{
theArray.printContent();
}
if (choice == 3)
{
theArray.endProgram(start);
}
}
}
您正在 Array
构造函数中定义新的局部变量并隐藏同名的成员变量 -- 这就是为什么不保留该值的原因。
你只需要在定义新变量时指定类型,而不是在分配给现有变量时。要分配给成员变量,这应该是:
Array::Array()
{
size = 100;
index = 0;
counter = 0;
ptr = new string[size];
...
}
此外,在构造函数中使用构造函数初始化列表来初始化值更正确:
Array::Array()
: size{100},
index{0},
counter{0},
ptr{new string[size]}
{
...
}