类定义小结

////////////////////默认构造函数////////////////////////
1>默认构造函数要么没参数,要么参数在申明时都有默认值

2>如不显式定义编译器将自动创建一个空的默认构造函数

3>派生类构造函数没有显式的调用基类构造函数,就会自动调用基类默认构造函数

4>如果定义某构造函数,编译器不会再自动定义默认构造函数需要显式的定义


///////////////////赋值构造函数////////////
基本原型  ClassName (const & ClassName);
一下情况会调用
1>将新对象初始化为一个同类对象
2>按值将对象传递给函数
3>函数按值返回对象
4>编译器生成临时对象

*如没有显式的定义编译器会自动提供原型,但不提供函数定义。

 

//////////////赋值操作////////////////////////
基本原型  ClassName & Classname::operator=(const & ClassName)
处理同类对象之间赋值,不要和赋值初始化混淆。


/////////////构造函数//////////////////
在其完成工作前对象是不存在的,所以不能被定为虚拟函数被对象调用,由于基类对象将先被构造

所以在派生类构造函数中需要使用,基类构造函数对基类成员赋值


////////////////////析构函数////////////
一定要在基类中定义为 虚拟 函数。
在使用 new等操作符的时候,用其实内存放


//////////////关于const////////////
 const char * const a[]={"sdad","asdasd",…};
第一个const表示字符串不能被修改,第二个const表示指针地址不能被修改。

 


//////类的继承///////////////
1>共有继承模型,基类的指针或应用可以指向基类或派生类的实例对象

 

 

////////虚函数(virtual)/////////////
1>定义为虚函数在申明中用virtual,定义时不用

2>调用虚拟函数,产生虚函数表,在对象中默认加入指向虚函数表的指针

3>使用虚函数,根据定义对象类型来判断用那个函数 (指针指向其函数表调用对应函数)
ep:
brass dom("sdfsd");
brassplus pas("sdfsdf");
brass & b1_ref=dom;
brass & b2_ref=pas;
b1_ref.acct();          //调用brass::acct()
b2_ref.acct();          //调用brassplus::acct()

4>没定义虚函数(acct()不是virtual)   将根据指针或引用类型确定使用那个函数方法
ep:
brass dom("sdfsd");
brassplus pas("sdfsdf");
brass & b1_ref=dom;
brass & b2_ref=pas;
b1_ref.acct();          // 两个都将调用brass::acct();
b2_ref.acct();
                             

////////////虚函数重新定义隐藏方法 ///////////
再派生类中重新定义虚方法时,如参数和基类中相关函数参数不一致,则会自动将基类的该函数隐藏而

不是重载。

1>如重新定义继承方法,则该保持与原型完全一致(但返回的是指针或引用,则可以将返回类型修改为

派生类的引用或指针,*仅仅限与“返回值”)

2>如果基类中声明被重载,又需要在派生类中重定义,则需要把所有版本重定义,否则没被定义的将被

隐藏而无法使用

//////////////格式化/////////////
ios_base::fmtflags initialState=cout.setf(ios_base::fixed,ios_base::floatfield);
 //保存调用函数前的格式
…                                                                           
cout.setf(initialState);         


                                        

posted @ 2007-02-26 08:03  Edward Xie  阅读(209)  评论(0)    收藏  举报