c++ note
2012-12-16 10:33 robturtle 阅读(484) 评论(0) 编辑 收藏 举报咳咳,准备清理NTFS分区啦,把分区里的一些笔记整理出来
初学c++ 类的设计参考 (MFC style)
template<typename T> class cClassName //使用小写c前缀主要是为了避免类名与MFC的类混同 /*:public BaseClass*/{ public: //*********constructor********** DefaultConstructor(void); CopyConstructor(cClassName&); //如果用到动态内存应重载 copy constructor virtual Deconstructor(void); //如果用到虚方法则应加 virtual 前缀 //*********operator************* friend T operator<<(args); //声明为友员函数是因为运算顺序的关系,如果是成员函数则运算顺序与习惯相反 friend T operator+(args); //声明为友员函数是因为参与运算的可能有其他数据类型,此时应重载该类型的 constructor cClassName& operator=(args); //必须为成员函数 //*********members************** T InterfaceFunc(args); inline T GetMemberData(args) const; //用内联常函数访问成员变量 static const T Flag; //自定义标识符 protected/private: T m_tMmbDat; //典型的 MFC 命名方式,好处是可以方便地区分成员变量,坏处是冗长而且会被 linuxer 耻笑 } //不过,需要这样区分成员变量吗? const T Flag = __value; // static 变量在类外定义
2012年7月 VS2008 中迭代器的使用差别
在VS2008中,如果使用传统的方式遍历list的话,会报出assert_error:"list iterator not dereferencable!". 一般传统的方式是:
list<TYPE>::iterator p = list.begin(); while(p!=list.end()){ do_sth; p++}
if (this->_Mycont == 0 || _Ptr == 0 || _Ptr == ((_Myt *)this->_Mycont)->_Myhead)
{ _DEBUG_ERROR("list iterator not dereferencable"); _SCL_SECURE_TRAITS_OUT_OF_RANGE; }
以此避免了迭代器从头开始循环。我把'|| _Ptr == ((_Myt *)this->_Mycont)->_Myhead)'这句注释掉之后,原来的方法可以正常使用。