第四讲第四讲类和对象类和对象(3)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计实习(I): C++程序设计序设计实(I)C序设计
第四讲类和对象(3)
成员初始化列表CClass::CClass(){
x=0;
y=1;
}
()(),y(){
CClass::CClass():x(0), y(1){
} //成员初始化列表
☐以下情况是必须:
⏹包含另一个类的成员
⏹成员是一个常量或是引用
4
class CMember{public:
CMember(int x){...} //显式声明构造函数,如果没有整数初始化
//则无法创建CMember 的一个实例
};
CMember* pm = new CMember; // Error CMember*pm =new CMember(2);CMember pm = new CMember(2); //OK
如果CMember 是另一个类的成员,如果要初始化,必须使用成员初始化列表
class CMyClass{
CMember m_member;public:
CMyClass();
}
CMyClass::CMyClass():m_member(2){5
...}
回顾及内容提要
☐主要概念
类对象成员变量☐语法细节
引用成员函数的写法⏹
类、对象、成员变量、成员函数
⏹引用、成员函数的写法⏹函数重载、缺省参数⏹对象的访问权限、友元⏹成员对象和封闭类⏹构造函数(复制构造函数)⏹析构函数、调用时机⏹const 成员和引用成员⏹常量对象和常量方法⏹
静态成员
⏹
this 指针
6
转换构造函数
☐定义转换构造函数的目的是实现类型的自动转换☐只有一个参数,而且不是复制构造函数的构造函数,一般就可以看作是转换构造函数
数一般就可以看作是
☐当需要的时候,编译系统会自动调用转换构造函数,建立一个无名的临时对象(或临时变量)
7
class Complex {
p g
public: float real, imag;
Complex( double f ) {
cout << "FloatConstructor called" << endl;
real = f ; imag = 0;
}
Complex( int i = 0 ) {
C l(i t i0){
cout << "IntConstructor called" << endl;
real=i;imag=0;
real = i; imag = 0;
}
~Complex() {
~Complex(){
cout << "Destructor called" << endl;
}
};
8
Complex c1 ; // Complex(0) c1 = {0, 0};
Complex c2 = 2; // Complex(2) c2= {2, 0}; Complex c2=2;//Complex(2)c2={20};
Complex c3 = 2.5; // Complex(2.5) c3 = {2.5, 0};
int main ()()
{
cout << "c1=" << c1.real << "+" << c1.imag << "i"
<< endl;
cout << "c2=" << c2.real << "+" << c2.imag << "i"
<< endl;
< cout << "in main" << endl; ;转,时象c1 = 4; //调用转换构造函数,生成临时对象 Complex c4[2]={4, Complex(10)}; cout << "end main" << endl; return 0; } 9 输出: IntConstructor called IntConstructor called FloatConstructor called c1=0+0i 10+0i c2=2+0i in main in main IntConstructor called //调用转换构造函数 Destructor called // 临时对象消亡 IntConstructor called IntConstructor called end main end main Destructor called Destructor called Destructor called Destructor called Destructor called Destructor called 10 Complex c1 ; // Complex(0) c1 = {0, 0}; Complex c2 = 2; // Complex(2) c2= {2, 0}; Complex c2=2;//Complex(2)c2={20}; Complex c3 = 2.5; // Complex(2.5) c3 = {2.5, 0}; int main ()() { cout << "c1=" << c1.real << "+" << c1.imag << "i" << endl; cout << "c2=" << c2.real << "+" << c2.imag << "i" << endl; < cout << "in main" << endl; p;时象 Complex c = 4; //不生成临时对象 Complex c4[2]={4, Complex(10)}; cout << "end main" << endl; return 0; } 11