- typdef 以及 typename 声明类型 时候,需要注意与const 使用时的 修饰作用。
- //pointer operator, not allowed //error: invalid operands of types ‘int*’ and ‘int*’ to binary ‘operator+’【指针不能重载运算符】
template <typename T>
class base
{
public:
virtual void print(const T i)
{ printf("base:: i=%x, *i=%x\n",i,*i);}
};
class baseDerived:public base<int*>
{
public:
// void print(const int* i) //not override
// { printf("baseDerived:: i=%x, *i=%x\n",i,*i);}
void print(int* const i)
{ printf("baseDerived:: i=%x, *i=%x\n",i,*i);}
};
//pointer operator, not allowed //error: invalid operands of types 'int*' and 'int*' to binary 'operator+'
//int* operator +(int* p1,int* p2)
//{
// return int*( (unsigned long)p1 +(unsigned long)p2 );
//}
int main()
{
base<int*>* b1=new baseDerived;
baseDerived* d1=new baseDerived;
int p=10;
b1->print(&p);
d1->print(&p);
base<int*>* b2=new base<int*>;
b2->print(&p);
delete b1;
delete b2;
delete d1;
}
template <typename T>
class base
{
T data;
public:
base(){};
base(T num):data(num)
{}
virtual void print(const T i)
{ printf("base:: i=%x, *i=%x\n",i,1);} //*i
virtual T operator +(T& other)
{ printf("base:: operator+ %x + %x\n",data,other); return data+other;}
};
class baseDerived1:public base<int>
{
int data;
public:
baseDerived1(){}
baseDerived1(int num):data(num)
{}
int operator +(int& other)
{ printf("base:: operator+ %x + %x\n",data,other); return data+other;}
void print(int* const i)
{ printf("baseDerived:: i=%x, *i=%x\n",i,*i);}
};
int main()
{
base<int>* b11=new baseDerived1(1);
baseDerived1* d11=new baseDerived1(2);
int oa=5;
printf("b11+5=%x\n",*b11+oa);
printf("d11+5=%x\n",*d11+oa);
base<int>* b12=new base<int>(5);
printf("b12+5=%x\n",*b12+oa);
}