次のコードがあります。
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
template <class T> class Stack
{
private:
T a[1001];
int i=0,j;
public:
void pop(void)
{
a[i-1]=0.0;
a[i-1]='\0';
}
void push(T &x)
{
a[i++]=x;
}
void push(const char &x)
{
a[i++]=x;
}
void top(void)
{
cout<<a[i-1];
}
};
int main()
{
Stack<char>s1;
s1.push('a');
s1.push('b');
s1.top();
s1.pop();
cout<<"\n";
Stack<int>s2;
s2.push(10);
s2.push(20);
s2.top();
s2.pop();
cout<<"\n";
Stack<double>s3;
s3.push(5.50);
s3.push(7.50);
s3.top();
s3.pop();
cout<<"\n";
return 0;
}
出力:
b
20
7
double の代わりに 7.5 が表示されるのはなぜですか?
double を明示的に特化し、参照演算子を使用しない場合、うまく機能します。
void push(double x)
{
a[i++]=x;
}
これにより、double の正しい出力が得られます。しかし、これを行うとエラーが発生します。
void push(T x)
{
a[i++]=x;
}
void push(const char &x)
{
a[i++]=x;
}
これを修正するには?
double の正しい出力を表示する方法は?