程序设计实****第十四讲类与对象III主讲教师:田永鸿******@://./cpp2008/tyh/://./jiaoxue-CPP/(三)转换构造函数再次讨论:常量对象和常量方法成员对象和封闭类const成员和引用成员友元this指针静态成员变量和静态成员函数从C++到C的翻译来理解this指针和静态成员课堂问题构造函数在哪几种情况下被调用?析构函数在哪几种情况下被调用?什么是复制构造函数?在哪几种情况下被调用?它与对象间用等号赋值的区别是什么?static、const和引用成员如何进行初始化?pair的数据成员为public,然而下面这段代码却不能编译,为什么?pair<int,int>p2={0,42}下面的第二个初始化不能编译,可以从vector的定义得出什么推断?Vector<int>v1(42);//OK,42elements,each0Vector<int>v2=42;//Error,Why?转换构造函数定义转换构造函数的目的是实现类型的自动转换只有一个参数,而且不是复制构造函数的构造函数,一般就可以看作是转换构造函数。#include<>plex{public:floatreal,plex(doublef){ printf("FloatConstructorcalled\n" ); real=f;imag=0;} Complex(inti=0){ printf("IntConstructorcalled\n"); real=i;imag=0; } ~Complex(){ printf("Destructorcalled\n"); }};Complexc1;//Complex(0)c1={0,0};Complexc2=2;//Complex(2)c2={2,0};Complexc3=;//Complex()c3={,0};intmain(){ printf("c1=%f+%fi\n",,); printf("c2=%f+%fi\n",,); printf("inmain\n"); c1=4; printf("endmain\n");return0;}输出:IntConstructorcalledIntConstructorcalledFloatConstructorcalledc1=+=+,则定义该对象的时候可以在前面加const关键字classSample{ private: intvalue; public: voidSetValue(){ }};constSampleObj;//();//错误。常量对象只能使用构造函数、析//构函数和有const说明的函数(常量方法)在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数classSample{ private: intvalue; public: voidSetValue()const{ value=0;//wrong//常量方法内部不能改变属性的值}};constSampleObj;//();在定义常量成员函数和说明常量成员函数时都应该使用const关键字classSample{ private: intvalue; public: voidSetValue()const;};voidSample::SetValue()const{//此处不使用const会//导致编译出错 cout<<value;}
类与对象III 来自淘豆网www.taodocs.com转载请标明出处.