Download presentation
Presentation is loading. Please wait.
1
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计
2
“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 类和对象的定义 对象数组 this指针 构造函数 对象作为普通函数的参数与返回值
析构函数 面向对象程序设计 对象数组 对象作为普通函数的参数与返回值 对象指针和堆对象 this指针 复制构造函数 内部类和命名空间 C++语言程序设计
3
基本知识 a C++语言程序设计
4
在定义一个对象的时候要给它分配存储空间,也可以同时给它的数据成员赋初值,称为对象的初始化。
7.2 构 造 函 数 不同的对象如何区分? 区别于其他对象的地方主要有两个,外在的区别就是对象的标识符,即对象的名称,而内在的区别就是对象自身的属性值,即数据成员的值。 在定义一个对象的时候要给它分配存储空间,也可以同时给它的数据成员赋初值,称为对象的初始化。 C++程序中的对象初始化工作由一个特殊的成员函数来完成,就是构造函数。 构造函数是类的成员函数。 因为不同类型的对象的初始化工作是不一样的,因此构造函数从属于某个类的,即每个类都要定义它自己的构造函数。 C++语言程序设计
5
7.2 构 造 函 数 定义构造函数的一般形式为: class 类名 { public: 类名(形参表); //构造函数的原型
7.2 构 造 函 数 定义构造函数的一般形式为: class 类名 { public: 类名(形参表); //构造函数的原型 //类的其它成员 }; 类名::类名(形参表) //构造函数的实现 //函数体 } C++语言程序设计
6
7.2 构 造 函 数 定义构造函数: C++语言程序设计 class Clock { public:
7.2 构 造 函 数 定义构造函数: class Clock { public: Clock(int H,int M,int S); //构造函数 void SetTime(int newH,int NewM,int newS); void ShowTime(); private: int Hour; int Minute; int Second; }; Clock::Clock(int H, int M, int S) { Hour=H; Minute=M; Second=S; } Clock MyClock(12,0,1); //正确 MyClock.ShowTime(); Clock b; //错误! C++语言程序设计
7
7.2 构 造 函 数 构造函数的特点: 函数名: 访问属性: 具有一般函数的特点: 构造函数没有返回类型,不能返回值 C++语言程序设计
7.2 构 造 函 数 构造函数的特点: 函数名: 与类名相同 访问属性: 构造函数一定是公有函数。 是类的成员函数,可以直接访问类的所有数据成员。 具有一般函数的特点: 函数可以带默认形参值,也可以重载。 哪一点除外? 构造函数没有返回类型,不能返回值 C++语言程序设计
8
7.2 构 造 函 数 构造函数的特点: 每个类都会存在构造函数 C++语言程序设计 不管用户在定义时是否定义。
7.2 构 造 函 数 构造函数的特点: 每个类都会存在构造函数 不管用户在定义时是否定义。 若用户未定义构造函数,编译器会自动添加默认构造函数 若用户定义了构造函数,编译器则不会自动添加 class Clock { public: Clock::Clock()//默认构造函数 {} void SetTime(); void ShowTime(); private: int Hour, Minute, Second; }; class Clock { public: void SetTime(); void ShowTime(); private: int Hour, Minute, Second; }; C++语言程序设计
9
7.2 构 造 函 数 构造函数的重载: #include <iostream> using namespace std;
7.2 构 造 函 数 构造函数的重载: #include <iostream> using namespace std; class Tdate { public: Tdate(); //第一个构造函数 Tdate(int d); //第二个构造函数 Tdate(int m,int d); //第三个构造函数 Tdate(int m,int d,int y); //第四个构造函数 private: int month; int day; int year; }; C++语言程序设计
10
7.2 构 造 函 数 构造函数的重载: C++语言程序设计 Tdate::Tdate()
7.2 构 造 函 数 构造函数的重载: Tdate::Tdate() { month=4; day=15; year=1995; cout <<month <<"/" <<day <<"/" <<year <<endl; } Tdate::Tdate(int d) { month=4; day=d; year=1996; Tdate::Tdate(int m,int d) { month=m; day=d; year=1997; Tdate::Tdate(int m,int d,int y) { month=m; day=d; year=y; void main() { //开始用4种方式构造4个对象 Tdate aday; Tdate bday(10); Tdate cday(2,12); Tdate dday(1,2,1998); } C++语言程序设计
11
7.2 构 造 函 数 复制构造函数(也称为拷贝构造函数) 复制构造函数的形参是类的对象的引用
7.2 构 造 函 数 复制构造函数(也称为拷贝构造函数) 复制构造函数的形参是类的对象的引用 Clock(const Clock & a){……} 复制构造函数与原来的构造函数实现了函数的重载。 自动生成特点 如果在类定义时没有定义复制构造函数,系统会生成默认的复制构造函数。 默认的复制构造函数完成所有数据成员的复制 何时会自动执行复制构造函数: 用一个对象初始化另外一个对象时(通过“=”或括号) 对象作为函数的参数,函数调用时 函数返回对象时 C++语言程序设计
12
7.2 构 造 函 数 复制构造函数(也称为拷贝构造函数) C++语言程序设计 class Tdate {
7.2 构 造 函 数 复制构造函数(也称为拷贝构造函数) class Tdate { public: Tdate(const Tdate &); …… }; Tdate a; Tdate b=a; void fun( Tdate x) { …… } fun(a); Tdate fun2() { Tdate x; ……. return x; } fun2(); Tdate x = fun2(); C++语言程序设计
Similar presentations