1 / 23

第三章

手机移动设备嵌入式 C++. 第三章. 对 象. 目标. 类对象 构造函数 析构函数 拷贝构造函数. 类对象. 为了使用类,还必须说明类的对象。在定义类时,系统是不会给类分配存储空间的,只有定义类对象时才会给对象分配相应的内存空间。 对象的定义格式: < 类名 > < 对象名表 > ; 其中, < 类名 > 是待定的对象所属的类的名字,即所定义的对象是该类的对象。 < 对象名表 > 中可以有一个或多个对象名,多个对象名用逗号分隔。在 < 对象名 > 中,可以是一般的对象名,还可以是指向对象的指针名或引用名,也可以是对象数组名。. 对象成员.

satya
Download Presentation

第三章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 手机移动设备嵌入式C++ 第三章 对 象

  2. 目标 • 类对象 • 构造函数 • 析构函数 • 拷贝构造函数

  3. 类对象 为了使用类,还必须说明类的对象。在定义类时,系统是不会给类分配存储空间的,只有定义类对象时才会给对象分配相应的内存空间。 对象的定义格式: <类名> <对象名表>; 其中,<类名>是待定的对象所属的类的名字,即所定义的对象是该类的对象。<对象名表>中可以有一个或多个对象名,多个对象名用逗号分隔。在<对象名>中,可以是一般的对象名,还可以是指向对象的指针名或引用名,也可以是对象数组名。

  4. 对象成员 对象成员的表示方法 一个对象的成员就是该对象的类所定义的成员。对象成员有数据成员和成员函数。一般对象的成员表示如下: <对象名>.<成员名> 或者 <对象名>.<成员名>(<参数表>) 前者用于表示数据成员,后者用于表示成员函数。这里的“.”是一个运算符,该运算符的功能是表示对象的成员。

  5. 示例 #include <iostream.h> class myclass { public: int data1; }; void main() { myclass object1; object1.data1 = 25; cout << "\n data1的值是" << object1.data1<<"\n"; }

  6. 对象指针成员 指向对象的指针的成员表示如下: <对象指针名>-><成员名> 或者 <对象指针名>-><成员名>(<参数表>) 同样,前者用于表示数据成员,后者用于表示成员函数。这里的“->”是一个表示成员的运算符,它与前面介绍过的“.”运算符的区别是:“->”用来表示指向对象的指针的成员,而“.”用来表示一般对象的成员。 对于数据成员和成员函数,以下两种表示方式是等价的: <对象指针名>-><成员名> 与 (*<对象指针名>).<成员名>

  7. 示例 #include <iostream.h> class myclass { public: int data1; }; void main() { myclass objact1; myclass *pObject1 = &objact1; pObject1->data1 = 25; cout << "\n data1的值是" <<pObject1->data1<<"\n"; }

  8. 构造函数 • 自动初始化对象的特殊的成员函数 • 与所属的类同名 • 可以在类中声明并定义构造函数,或在类中声明而在外部定义 • 构造函数没有返回类型 • 默认构造函数是不带任何参数的构造函数

  9. 示例1 class IMTI { public: IMTI(); //构造函数 }; IMTI() :: IMTI()() { }

  10. 示例2 class date{ int month, day, year; public: date()//默认构造函数 {day=1; month=1; year=1999;} date(int x)//仅指定日 {day=x; month=1; year=1999;} date(int x, int y, int z)//指定年月日 {day=x; month=y; year=z;} };

  11. 缺省构造函数 缺省构造函数是指不需要用户指定实参就能够被调用的构造函数,这并不意味着它不能接受实参。只意味着构造函数的每个参数都有一个缺省值与之关联。如: • Account::Account() { ... } • Stack::Stack( int size = 0 ) { ... } • Complex::Complex(double re=0.0,double im=0.0) { ... }

  12. 构造函数 编译器根据参数调用不同的构造函数 date now; date today(4); date all(23,3,1998);

  13. 析构函数 • 在对象销毁时自动调用的成员函数 • 编译器会生成对析构函数的调用 • 与类同名,但是在函数名前有个波浪号 (~) • 析构函数没有返回类型,也不带参数 • 一个类中只可能定义一个析构函数。

  14. 示例1 class imti { public: ~ imti(); //析构函数 }; IMTI() :: ~IMTI()() { }

  15. 示例2 #include<iostream.h> class Sample { public: Sample() {x = 0;} ~Sample() { cout<<"析构函数被调用!"<<endl; } int x; void Print() { cout<<"x = "<<x<<endl; } }; void main() { Sample s1; s1.Print(); s1.~Sample(); }

  16. 缺省析构函数 缺省析构函数的格式如下: • <类名>::~<缺省析构函数名>{ } • <缺省构析函数名>即为该类的类名。缺省析构函数是一个空函数

  17. 拷贝构造函数  在下列情况,会调用拷贝构造函数 • 将某个对象初始化为类的另一个对象时 • 将对象当作参数传递给函数时 • 函数返回对象时

  18. 拷贝构造函数 • 如果没有定义拷贝构造函数,编译器将自动生成一个 • 自动生成的拷贝构造函数只是将对象内容逐个字节地copy • 当数据成员有指针时,将导致两个对象的指针指向同一个地址

  19. 拷贝构造函数 定义 以对象的引用作为参数的构造函数 X::X(X &ptr) 或 X::X(const X &ptr) 使用 const 关键字,可以确保拷贝过程不会意外地更改源对象

  20. 示例1 #include<iostream.h> class TPoint { public: TPoint(int x, int y){ m_x = x; m_y = y;} TPoint(TPoint & p); ~TPoint(){cout<<"Destructor Called!\n";} int Xcoord() {return m_x;} int Ycoord() {return m_y;} private: int m_x, m_y; };

  21. 示例1(续) TPoint::TPoint(TPoint & p) { m_x = p. m_x; m_y = p. m_y; cout<<"Copy-initialization Constructor Called.\n,"; } void main() { TPoint p1(5, 7); TPoint p2(p1); cout<<"p2 = "<<p2.Xcoord()<<","<<p2.Ycoord()<<endl; }

  22. 示例2 #include<iostream.h> class TPoint { public: TPoint(int x, int y){ m_x = x; m_y = y; cout<<"now is beginning"<<endl; } TPoint(TPoint & p); ~TPoint(){cout<<"Destructor Called!\n";} int Xcoord() {return m_x;} int Ycoord() {return m_y;} private: int m_x, m_y; };

  23. 示例2(续) TPoint::TPoint(TPoint & p) { m_x = p. m_x; m_y = p. m_y; cout<<"Copy-initialization Constructor Called.\n,"; } TPoint F(TPoint q) { cout<<"ok\n"; int x, y; x = q.Xcoord() + 10; y = q.Ycoord() + 20; TPoint R(x, y); return R; } void main() { TPoint a(20, 35), b(0, 0); TPoint n(a); b=F(n); cout<<"b="<<b.Xcoord()<<","<<b.Ycoord()<<endl; }

More Related