这里是新手,所以放轻松:) 我已经用谷歌搜索了,似乎真的找不到一个优雅的解决方案。我正在做一些编码来学习一些概念。
我有一个名为“sally”的类,它有一个重载两次的构造函数,即我的 sally.cpp 是:
#include "sally.h"
#include <iostream>
#include <string>
using namespace std;
sally::sally()
{
}
sally::sally(int x)
{
inputvarint = x;
cout << "you have an int of value: " << inputvarint << endl;
}
sally::sally(string y)
{
inputstring = y;
cout << "you have a string that is: " << inputstring << endl;
}
在我的 main.cpp 中,如果我创建对象sally myobj;
然后通过对象调用函数,即sally.myobj(55)
我得到正确的构造函数并告诉我我有一个 INT 值,或者如果我去sally.myobj("johhny")
我让另一个构造函数去告诉我有一个字符串,上面写着“johnny”,所以那部分我很好。
我想知道的是,有没有一种优雅的方式可以使用 CIN 从用户那里获取输入,或者直接将其传递给对象 - 不使用变量(我已经尝试过但无法让它工作)。
基本上,我希望用户能够输入一个字符串或一个 int 并在 sally.myobj(); 中使用它。调用,并让构造函数来确定它是什么类型的数据。
之类的东西:
auto x = 0;
然后cin >> x
不工作,因为最初的声明是一个 int,所以它保持这样。
有没有办法声明一个没有类型的变量并根据 CIN 的输入为其分配一个类型?
抱歉,如果这个问题的答案非常明显,但我正处于旅程的开始阶段(我正在学习这个人的第 40 篇教程:http ://www.youtube.com/watch?v=tvC1WCdV1XU )并阅读 Stanley Lippman 的 C++ Primer(第 5 版)和 Matt Weisfield 的 The Object-Oriented Thought Process。它们是我目前唯一的资源(那个和谷歌)。
提前致谢
塞布
编辑:
在看到下面的一些回复后,它帮助我弄清楚了什么可以/不能做什么,我已经使用一个利用一些正则表达式的解析函数来解决它,如果字符串内容被认为是 INT 然后转换它并将其放入一个新变量并关闭到构造函数中:
莎莉.cpp:
#include "sally.h"
#include <iostream>
#include <string>
#include <regex>
using namespace std;
sally::sally()
{
}
sally::sally(int x)
{
inputvarint = x;
cout << "Constructor output: you have an int of value: " << inputvarint << endl;
}
sally::sally(string y)
{
inputstring = y;
cout << "Constructor Output: you have a string that is: " << inputstring << endl;
}
void sally::StringParser(string x){
regex e("^[0-9]+$"); //test if the string starts with ends with and has a whole lot of numbers in between, i.e. and INT of any length
bool match = regex_match(x, e);
if(match){
cout << "you have an int" << endl;
int newvar = atoi(x.c_str());
sally::sally(newvar);
}
else {sally::sally(x);}
}
然后我简单地说sally myobj;
xmyobj.StringParser(x);
是来自 CIN 的输入,Parsing 函数负责其余部分并将其传递给构造函数。
我确信我可以使用具有不同 REGEX 的 SWITCH 语句来处理浮点数等,然后创建额外的构造函数。但就目前而言,我似乎找到了解决方案。
热衷于看看我的方法是否有任何问题。