如何使用 C++ 模板实现 int、string、float 和 date 对象的数组?
Posted
技术标签:
【中文标题】如何使用 C++ 模板实现 int、string、float 和 date 对象的数组?【英文标题】:How to implement array of int, string, float and date object using c++ Template? 【发布时间】:2019-07-22 23:23:03 【问题描述】:编写一个程序,使用类模板创建和显示整数、浮点数、字符串和 Date 对象的数组(其中 Date 对象使用整数月、日、年属性对日期建模)。
我能够显示整数、浮点数和字符串的数组,但在使用 Date 对象的数组时遇到了问题。我不确定如何从模板类调用打印日期函数(在 Date 类中)。
template< typename T >
class Myarray
private:
int size;
T *myarray;
public:
// constructor with user pre-defined size
Myarray(int s , T* array)
size = s;
myarray = new T[size];
for (size_t i = 0; i < size; ++i)
myarray[i] = array[i]; // Copy into object
// calss array member function to set element of myarray
// with type T values
void setArray(int elem, T val)
myarray[elem] = val;
// for loop to display all elements of an array
void getArray()
for (int j = 0; j < size; j++)
// typeid will retriev a type for each value
cout << setw(7) << j << setw(13) << myarray[j] <<endl;
cout << "-----------------------------" << endl;
;
class Date
private:
int day;
int month;
int year;
public:
Date()
day = month = year = 0;
Date(int day, int month, int year)
this->day = day;
this->month = month;
this->year = year;
void print_date(void)
cout << day << "/" << month << "/" << year << endl;
;
int main()
// instantiate int_array object of class array<int> with size 2
int array1[] = 1,2,3,4,5 ;
Myarray< int > int_array(5,array1);
int_array.getArray();
float array2[] = 1.012, 2.324, 3.141, 4.221, 5.327 ;
Myarray<float> b(5, array2);
b.getArray();
std::string array3[] = "Ch1","Ch2","Ch3","Ch4","Ch5" ;
Myarray<std::string> c(5, array3);
c.getArray();
Date array4[] = Date(10, 18, 2019), Date(1, 01, 2019), Date(7, 04, 2019),
Date(12, 31, 2019), Date(12, 25, 2019) ;
Myarray<Date> d(5, array4);
d.getArray();
return 0;
收到错误消息:
Error C2679 binary '<<': no operator found which takes a right-hand operand of type 'Date'
【问题讨论】:
【参考方案1】:问题出在您的getArray
函数中,该函数在myarray
上调用<<
,T
类型为:
cout << setw(7) << j << setw(13) << myarray[j] <<endl;
在这里,它期望myarray[j]
可以用operator<<
调用,这对于int
、float
和std::string
是正确的,但是您的Date
类不提供operator<<
来使用,它怎么知道它应该如何输出?它不会知道打电话给print_date
。相反,您应该在Date
中提供一个operator<<
:
friend std::ostream& operator<<(std::ostream& oss, const Date& d)
oss << d.day << "/" << d.month << "/" << d.year << "\n";
return oss;
现在您可以编写如下内容:
Date d;
std::cout << d;
同样,您的MyArray
类也可以使用它。
【讨论】:
以上是关于如何使用 C++ 模板实现 int、string、float 和 date 对象的数组?的主要内容,如果未能解决你的问题,请参考以下文章