我的一項任務涉及使用帶有引數的建構式創建一個類,其中發送來創建物件的引數基于用戶輸入。
#include <iostream>
#include "HRCalc_lib.h"
HeartRates::HeartRates(const std::string &first, const std::string &last,
int day, int month, int year){
firstName = first;
lastName = last;
setBirthYear(year);
setBirthMonth(month);
setBirthDay(day);
}
注意:這是來自.cpp完全撰寫成員函式的檔案。所有其他類語法都在頭檔案中。
我std::cin通過使用帶有變數的建構式來創建一個物件main。
#include <iostream>
#include "HRCalc_lib.h"
int main(){
std::string first, last;
int Bday, Bmonth, Byear;
std::cout << "enter your name (first last) & date of birth (dd mm yyyy) seperated by spaces" << std::endl;
std::cin >> first >> last >> Bday >> Bmonth >> Byear;
HeartRates person1(first, last, Bday, Bmonth, Byear);
//further code would be implemented here
return 0;
}
有沒有更直接的方法來創建相同的物件而不需要 main 中的變數?
uj5u.com熱心網友回復:
有沒有更直接的方法來創建相同的物件,而不需要變數來將用戶輸入存盤在 main 中?
就在這里。您可以使用運算子多載。特別是,您可以多載operator>>如下所示:
#include <iostream>
#include<string>
class HeartRates
{
private:
std::string first, last;
int day = 0, month = 0, year = 0;
//friend declaration for overloaded operator>>
friend std::istream& operator>>(std::istream& is, HeartRates& obj);
};
//implement overloaded operator<<
std::istream& operator>>(std::istream& is, HeartRates& obj)
{
is >> obj.first >> obj.last >> obj.day >> obj.month >> obj.year;
if(is)//check that input succeded
{
//do something here
}
else //input failed: give the object a default state
{
obj = HeartRates();
}
return is;
}
int main(){
HeartRates person1;
//NO NEED TO CREATE SEPARATE VARIABLES HERE AS YOU WANT
std::cout << "enter your name (first last) & date of birth (dd mm yyyy) seperated by spaces" << std::endl;
std::cin >> person1; //this uses overloaded operator>>
return 0;
}
上述程式的輸出可以在這里看到。
我們在這里寫的時候:
std::cin >> person1;
我們使用的是多載的operator>>,所以你不需要在里面創建單獨的變數main。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440092.html
