一个运算符重载: operator T()const {}
在一个模板类中有这样一个运算符重载:template<typenameT>classXXX{....operatorT()const{}...}请问这个重载的是T这个运算...
在一个模板类中有这样一个运算符重载:
template<typename T>
class XXX
{
....
operator T()const {}
...
}
请问这个重载的是T这个运算符 那么他怎么使用呢? 展开
template<typename T>
class XXX
{
....
operator T()const {}
...
}
请问这个重载的是T这个运算符 那么他怎么使用呢? 展开
展开全部
其实很简单,只要你对类的构造函数和析构函数了解的差不多。
首先说第一个问题:
/////为什么会突然出现"string t(p)"//
在函数 string::operator+(const char*p)中,它接受一个字符指针p,返回一个string类对象,这个你懂吧?这就好办了,这个函数想返回一个string类对象,必须先建立一个对象吧?所以有string t(p);利用了
string(const chat*s)
{ptr=new char[strlen(s)+1];
strcpy(ptr,s);
}
这个构造函数,即把指针p传给构造函数,新建一个对象。
然后第二个:t=*this+t; /////为什么会有两个t,它们各表示什么//
第一个t是等待被赋值的string类对象,*this就是当前对象的内容,也就是谁调用了string::operator+(const char*p),*this就是谁(这里是另一个string对象)。然后*this+t就是把两个string类对象相加,最后赋给对象t。
给你举个例子:
#include <iostrean.h>
#include<string.h>
int main()
{
char s[20]="kkk is a good man";
string mystring("kkk is No.1 ");
mystring=mystring+s;//调用运算符+即
//string::operator+ //(const
//char*p)
return 0;
}
这个程序就调用了重载运算符,使string类对象内容变为“kkk is N0.1 kkk is a good man”
呵呵,到这你应该懂了一点吧?
/////////"t(p)"表示什么,为什么P在括号内//
我这个还用说吗?这是新建一个string类对象,以字符指针p作为参数,所以要在括号内。
{char temp[4096]; ///temp[4096]是什么///
你应该知道数组吧?比如int myint[10]就是建立一个整数变量数组,而且大小为10个整数的大小,同理,
char temp[4096]就是建立一个字符数组(和指针类似,就是有大小限定,指针没有限定),该字符数组的大小为4096个字符。
in>>temp; ///in>>是什么意思///
这是输入流的一个操作符,意思是从键盘输入的内容(流)送入到计算机内供处理。这个操作符被重载了,所以你可以从键盘上直接输入一个string类对象,比如这样cin>>mystring;就可以实现了。(mystring就是一个string类对象)
out<<s.ptr; //"out<<"是什么意思///
这是输出流的一个操作符,意思是程序输出内容(流)送入屏幕等输出设备。这个操作符重载后你就可以这样写程序了:cout<<mystring;
呵呵,简单吧?
">>" 与 "<<"有什么作用
我就不用说这个了吧?
展开全部
这是类型转换运算符,只要你把XXX对象隐式或者显式转换为T对象时,它自动被调用
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是一个类型转化操作符重载啊。
给你个demo看看吧:
#include<iostream>
using namespace std;
template<typename T>
class Transfer
{
public:
Transfer(int arg):i(arg){}
operator T()const
{
return i;
}
private:
int i;
};
int main()
{
Transfer<double> t(3);
double d = t.operator double();
cout<<d;
return 0;
}
给你个demo看看吧:
#include<iostream>
using namespace std;
template<typename T>
class Transfer
{
public:
Transfer(int arg):i(arg){}
operator T()const
{
return i;
}
private:
int i;
};
int main()
{
Transfer<double> t(3);
double d = t.operator double();
cout<<d;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询