class CTest:public CObject
{
public:
......
}
class CTest
{
public:
......
}CTest a;
CTest b;
a=b;//这一句有问题,如果我指定了父类是CObject,那么=操作符就不能用,因为我的类中没有重载=操作符,而=在CObject类中是私有的。如果我不指定父类,那么=就能用,这就奇怪了,应该默认父类是是CObject啊,如果我不指定的话。

解决方案 »

  1.   

    CObject::operator = 
    void operator =( const CObject& src );ResThe standard C++ default class assignment behavior is a member-by-member copy.
      

  2.   

    不指定父类,那么就没有父类,不是CObject
      

  3.   

    C++不象Java和C#,类是没有默认父类的,如果要继承一个类,只能显式的指定要继承的父类!   
      在MFC中,如果你的类是从CCmdTarget(或者是CCmdTarget的子类)继承,系统会自动替你加上如下所示的代码:   
      BEGIN_MESSAGE_MAP(CYourClass,   CYourClassParent)   
      //{{AFX_MSG_MAP(CYourClass)   
      //}}AFX_MSG_MAP   
      END_MESSAGE_MAP()   
      上面这些宏都是MFC内置的!   
      

  4.   

    但就我上面的例子,有一个问题;为什么继续自CObject后“赋值运算符(=)”就不能用了呢,我看了,“赋值运算符(=)”在CObject中是私有的,但“赋值运算符(=)”是不能重载的啊。也就是说我的类不管是否继承自CObject,都应该有“赋值运算符(=)”啊。
    但事实证明,只要继承了CObject,“赋值运算符(=)”就不能用了。
      

  5.   

    楼主存在两个认识上的错误!
    1、赋值运算符(=) 是可以重载的
    2、赋值运算符(=)在CObject中虽然有定义,但是没有实现。c++中,如果你没有为一个类定义"="操作符,那么编译器会为你提供一个默认的,这就是你随便写一个类可以用"="操作符的原因。但是CObject中已经定义了"="操作符,只是没有实现,也就是说编译器不会为你提供默认的"="操作符了,必须要你自己实现。从CObjcet继承的子类也是这样。
      

  6.   

    class CTest:public CObject    CObject是老大
    class CTest         类本身是老大可以自己重载=操作符
      

  7.   

    在CTest自己重载CTest& operator =( const CTest &rhs);
      

  8.   

    楼主存在两个认识上的错误!
    1、赋值运算符(=) 是可以重载的
    2、赋值运算符(=)在CObject中虽然有定义,但是没有实现。c++中,如果你没有为一个类定义"="操作符,那么编译器会为你提供一个默认的,这就是你随便写一个类可以用"="操作符的原因。但是CObject中已经定义了"="操作符,只是没有实现,也就是说编译器不会为你提供默认的"="操作符了,必须要你自己实现。从CObjcet继承的子类也是这样。