新手急问:C++运算符重载问题
class Creator
{
public:
Creator() { i=1; }
void test() { printf("test---\n"); }
public:
int i;
};
template <class T> class SOCmnPointer
{
public:
// constructors
SOCmnPointer(void) { p = NULL;printf( "构造函数1\n"); }
SOCmnPointer(T* p_) { p = p_;printf( "构造函数2\n");}
T* operator->() { return p; }
public:
T* p;
};
////////////
Creator * get()
{
Creator *pointer;
pointer=new Creator();
return pointer;
}
//////// main
int main(int argc, _TCHAR* argv[])
{
SOCmnPointer<Creator> creator;
creator = get();
creator->test();//creator.p->test();
return 0;
}
对于上面的代码,模板类template <class T> class SOCmnPointer的声明中定义了一个“->”的重载
按照我自己的理解 creator->test() 中的“creator->”先调用重载,返回一个SOCmnPointer*(即T*)指针,再由这个指针去调用成员函数 test() ,但用于语句中的“->”已经用过了,所以相当于 new Creator()test() ,中间少了个“->”,无法指向啊,怎么回事呀???
相关推荐
详解C++ 重载运算符和重载函数
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 C++ 中的函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。 下面的实例中,同名函数 print() 被
C++运算符重载规则详解
主要介绍了C++运算符重载规则详解,是C++入门学习中的基础知识,需要的朋友可以参考下
C++重载运算符的规则详解
(1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。例如,有人觉得BASIC中用“* *”作为幂运算符很方便,也想在C++中将“* *”定义为幂运算符,用“3* *5”表示35,这是不行的。 (2)C++允许重载的运算符C++中绝大部分运算符都是可以被重载的。 不能重载的运算符只有5个: . (成员访问运算符) .* (成员指针访问运算符) :: (域运算符) sizeof (长度运算符) ?: (条件运算符) 前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算
C++ 重载运算符和重载函数
C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 C++ 中的函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。 下面的实例中
详解C++编程中的单目运算符重载与双目运算符重载
C++单目运算符重载 单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和–i等。重载单目运算符的方法与重载双目运算符的方法是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数。 下面以自增运算符”++“为例,介绍单目运算符的重载。 [例] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。 #include <iostream> using namespace std; class Time { publ


