类定义小结
////////////////////默认构造函数////////////////////////
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);


浙公网安备 33010602011771号