第3章_关于类和对象的进一步讨论

合集下载

第三章 类和对象的进一步讨论(四)

第三章 类和对象的进一步讨论(四)

本节要点
• 对象的引用 • 静态成员 • 类属
引用
• 引用的概念:在c++中பைடு நூலகம்变量的“引用”就
是变量的别名,因此,引用又称为别名 (alias)。 • 对一个变量的“引用”的所有操作,实际 上都是对其所代表的变量的操作。
引用的定义
int a; int &b=a; 注意: (1)此时的&符号并不是取地址符; (2)声明一个引用时必须同时初始化; int a; int &b;//错误,应该同时初始化 b=a; (3)引用在初始化后不能再声明为另一个变量的引用。 引用的实际用途:引用做为函数参数,而且用法比指针简 单,易于理解。
c++面向对象程序设计
第三章 关于类和对象的进一步 讨论
#include <iostream.h> class Account { public: int balance; Account(){cout<<"default constructor"<<endl;} Account(int a_balance){cout<<“para constructor”<<endl;} ~Account(){cout<<"destructor of Accout"<<endl;} }; void main() { Account a_obj; Account *ptr=new Account(10); delete ptr; }
例: class A { public: static int obj_count;//静态成员变量 }; int A::obj_count=0; • 静态成员变量的引用:可以通过对象名也可通过类名引用。

Chapter关于类和对象的进一步讨论

Chapter关于类和对象的进一步讨论
系统在什么时候调用构造函数?多个对象时构 造函数的调用顺序?
18
3.1 构造函数
3.1.1 对象的初始化 3.1.2 构造函数的作用 3.1.3 无参和带参的构造函数 3.1.4 用参数初始化表对数据成员初始化 3.1.5 构造函数的重载 3.1.6 带默认参数的构造函数
19
3.1 构造函数
3.1.4 用参数初始化表对数据成员初始化 参数初始化表——对数据成员的初始化放
2、构造函数的权限必须是public。 3、构造函数不需要也不能被用户调用,而是在创建
对象时由系统自动调用执行。 4、每个类都必须有一个构造函数,用户没有定义时,
系统会自动生成一个空的构造函数。
12
3.1 构造函数
3.1.1 对象的初始化 3.1.2 构造函数的作用 3.1.3 无参和带参的构造函数 3.1.4 用参数初始化表对数据成员初始化 3.1.5 构造函数的重载 3.1.6 带默认参数的构造函数
10
3.1 构造函数
3.1.2 构造函数的作用
构造函数是类中一种特殊的成员函数。
构造函数的作用是在系统创建对象时,给 对象的数据成员进行初始化。
格式: 类名(参数表) { 函数体; }
11
3.1 构造函数
3.1.2 构造函数的作用
构造函数的特点
1、构造函数名字必须与类名相同,不具有任何类型, 也不返回任何值。
23
3in.t1mai构n() 造函数
{ ClassB b1(2200,3600) ; b1.print(); return 0;
} 运行结果: 调用ClassA构造函数! 调用ClassB构造函数! a=2200 b=3600
4
本章内容
3.7 对象的动态建立和释放 3.8 对象的赋值和复制 3.9 静态成员 3.10 友元 3.11 类模板

第三章_关于类和对象的进一步讨论

第三章_关于类和对象的进一步讨论
3
构造函数





在建立一个对象时,常常需要作某些初始 化的工作,例如对数据成员赋初值。 如果一个数据成员未被赋值,则它的值是 不可预知的。 对象是一个实体,它反映了客观事物的属 性,是应该有确定的值。 类的数据成员不能在声明类时初始化。 如果一个类中所有的成员都是公用的,可 以在定义对象时对数据成员进行初始化。
int main( ) {Box box1; //没有给实参 cout<<″The volume of box1 is ″ <<box1.volume( )<<endl; Box box2(15); //只给定一个实参 cout<<″The volume of box2 is ″ <<box2.volume( )<<endl; Box box3(15,30); //只给定2个实参 cout<<″The volume of box3 is ″ <<box3.volume( )<<endl;
4
构造函数(续)
class Time {public : //声明为公用成员 hour; minute; sec; }; Time t1={14,56,30}; //将t1初始化为14:56:30 这种情况和结构体变量的初始化是差不多的, 在一个花括号内顺序列出各公用数据成员的值 ,两个值之间用逗号分隔。
17
例3.2 带参数的构造函数举例
int main( ) {Box box1(12,25,30); //建立对象box1, cout<<″The volume of box1 is ″ <<box1.volume( )<<endl; Box box2(15,30,21); //建立对象box2 cout<<″The volume of box2 is ″ <<box2.volume( )<<endl; return 0; }

第3章 类与对象

第3章  类与对象

图将适用于不同目的的使用者。
3.1.1 面向对象术语


抽象原则--对抽象的理解
地形是抽象的另一个例子。

艺术家会从颜色,纹理,形状等可能成为绘画主题的角度来观察地
形;

住宅建筑师将会从另外的角度来观察地形:最好的建筑位置在哪里,
建筑工程需要砍掉多少树木;

生态学家 则会从保存和保护的角度,为了生物的多样性仔细研究树


很显然,交通图上面,不可能包括所有的建筑物,树木,广告牌, 交通灯,路人之类的在现实生活中确实存在的物体。否则,该交 通图则显得非常混乱,甚至将无法使用。

继续将交通图和描述同一地理区域内的地形图,气象图和人口密
度图比较一下,我实世界的不同特征,也就是说,这些


抽象原则-----将抽象组织成类层次结构
但是,要想精确地提出,将物体在抽象层次结构中正确分类 所必需的规则并不总是容易的。

以“鸟类”为例,我们可能会这样定义成为鸟类的规则: 一,有羽毛; 三,会产卵; 二,有翅膀;



四,能飞行。
按照这样的判断规则, 鸵鸟和企鹅都不能归 为鸟类,因为他们都 不会飞。

面向对象概述

随着软件形式化方法和新兴软件的开发,传统的软件工程方法 的局限性逐渐暴露出来,存在的主要问题如下:

(3)传统软件开发方法难以实现从分析到设计的直接过渡
分析和设计是软件开发的两个最重要的阶段。传统的软件开发方法
在这两个阶段所建立的模型通常是完全不同的,例如,结构化方法, 主要的分析模型是分层的 DFD 图,而设计阶段的模型则是软件结构
最简软件---功能分解方法

第三章关于类和对象的进一步讨论00

第三章关于类和对象的进一步讨论00
C++面向对象程序设计
第3章 关于类和对象的进一步讨论
1
C++面向对象程序设计
本章主要内容
• 3.1构造函数 • 3.2析构函数 • 3.3调用构造函数
和析构函数的顺序
• 3.4对象数组 • 3.5对象指针 • 3.6共用数据的保

• 3.7对象的动态建 立和释放
• 3.8对象的赋值和 复制
• 3.9静态成员 • 3.10友元
6
C++面向对象程序设计
构造函数
4.构造函数可以带参数。
例3.2 有两个长方柱,其长、宽、高分别为: (1)12,25,30;(2)15,30,21。 分别求它们的体积。编写一个程序,在类中 用带参数的构造函数。
第3章关于类和对象的进一步讨论
7
C++面向对象程序设计
#include <iostream> using namespace std; class Box {public:
第3章关于类和对象的进一步讨论
14
C++面向对象程序设计
• 执行结果: The volume of box1 is1000 The volume of box2 is11250
第3章关于类和对象的进一步讨论
15
C++面向对象程序设计
用参数初始化表对数据成员初始化
• 可使用参数初始化表进行初始化 如: Box::Box(int h,int w,int len): height(h),width(w),length(len) {}
• 3.11类模板
第3章关于类和对象的进一步讨论
2
C++面向对象程序设计

关于类和对象的进一步讨论

关于类和对象的进一步讨论

第3章关于类和对象的进一步讨论请注意,这一章内容是C++的重点,要特别注意!第2章我们介绍了关于类的一些基本内容,对于类对象的数据成员的初始化我们始终是通过建立成员函数来实现的。

如:类Time就是通过set_time这个成员函数来实现的。

而且一般都是用赋值语句给数据成员赋值,或通过cin来为数据成员从键盘输入值来实现。

然后手工调用该函数对数据成员进行赋值的。

//自编,这是一个由cin的输入或用赋值语句来为数据成员赋值的程序#include<iostream>using namespace std;class Point{int x, y;public:void set(){cin>>x>>y;}void set(int x,int y){Point::x=x;Point::y=y;}void print(){ cout<<"("<<x<<", "<<y<<")\n"; }};//===============================int main(){Point a,b;a.set();b.set(4,5);a.print();b.print();}//================================那么在C++中对于类来说有没有更方便的方式能够在对象创建的时候就自动初始化数据成员呢?答案是肯定的。

关于C++类成员的初始化,有专门的构造函数来进行自动操作而无需要手工调用。

3.1 构造函数3.1.1 对象的初始化对象和变量一样,不赋初值是没有意义的。

根据变量定义,全局变量和静态变量在定义(分配空间)时,初值为0,局部变量在定义时才分配内存空间,其内容为随机数。

对象定义和变量定义一样,当创建全局对象时如果没有初始化,初值为0,当创建局部对象时,如果没有初始化则以随机值表示对象。

数据结构与程序设计考试大纲

数据结构与程序设计考试大纲

《数据结构与程序设计》考试大纲一.考试大纲的性质数据结构与程序设计课程是计算机相关学科的专业基础课程,主要包括数据结构与算法分析和计算机语言程序设计的内容。

为帮助考生明确本课程的考试复习范围和有关要求,特制定本考试大纲。

本考试大纲主要根据指定参考书《数据结构与算法分析(C++ 版)(第二版)》((美)Clifford A. Shaffer著,张铭刘晓丹等译,北京:电子工业出版社,2010)、《C++面向对象程序设计》(谭浩强编著, 清华大学出版社,2006)编制而成。

适用于报考中国林业科学院硕士学位研究生的考生。

二.考试内容(一)数据结构考试内容第一部分基础知识和概念第1章数据结构和算法第2章数学预备知识第3章算法分析第二部分基本数据结构第4章线性表、栈和队列第5章二叉树第6章树第三部分排序和检索第7章内排序第8章文件管理和外排序第9章检索第10章索引技术第四部分应用与高级话题第11章图第12章线性表和数组高级技术第13章高级树形结构第14章分析技术第15章计算的限制(二)程序设计内容第1章C++的初步知识1.1 从C到C++1.2 最简单的C++程序1.3 C++对C的扩充1.4 C++程序的编写和实现1.5 关于C++上机实践第2章类和对象第3章关于类和对象的进一步讨论第4章运算符重载第5章继承与派生第6章多态性与虚函数第7章输入输出流第8章C++工具三.考试要求数据结构与程序设计作为计算机相关专业的基础和公共课程,要求考生掌握数据结构和算法分析的基本概念、掌握常用数据结构及其分析算法,了解常用面向对象的编程语言的特点和编程规范,能熟练应用C++程序语言编写和实现简单应用程序(如数据结构与算法等)。

了解数据结构算法与计算机程序设计的关系,具有综合运用所学知识分析和解决问题的能力。

四.试卷结构数据结构与程序设计各占50%。

1. 名词解释(30%)2. 简答题(40%)3. 论述题(30%)五.考试方式和时间考试方式:笔试考试时间:3小时主要参考书1.《数据结构与算法分析(C++ 版)(第二版)》,(美)Clifford A. Shaffer 著,张铭刘晓丹等译,北京:电子工业出版社,20102.《C++面向对象程序设计》,谭浩强编著, 清华大学出版社,20062。

关于类和对象的进一步讨论(2)

关于类和对象的进一步讨论(2)

cin>>sec;
} void Time∷show_time( )
//定义成员函数,输出数据成员的值
{
cout<<hour<<″:″<<minute<<″:″<<sec<<endl;
}
int main( )
{ Time t1; t1.set_time( ); t1.show_time( ); Time t2; t2.show_time( );
Box box2(15,30,21);
//建立对象box2,并指定box2长、宽、高的值
cout<<″The volume of box2 is ″<<box2.volume( )<<endl;
return 0;
}
程序运行结果如下:
The volume of box1 is 9000 The volume of box2 is 9450
可以知道:
(1) 带参数的构造函数中的形参,其对应的实参 在定义对象时给定。
(2) 用这种方法可以方便地实现对不同的对象进 行不同的初始化。
9.1.4 用参数初始化表对数据成员初始化
在9.1.3节中介绍的是在构造函数的函数体内通过赋 值语句对数据成员实现初始化。C++还提供另一种 初始化数据成员的方法——参数初始化表来实现对 数据成员的初始化。这种方法不在函数体内对数据 成员初始化,而是在函数首部实现。例如例9.2中 定义构造函数可以改用以下形式:
int main( )
{
Box box1;
//建立对象box1,不指定实参
cout<<″The volume of box1 is ″<<box1.volume( )<<endl;

关于类和对象的进一步讨论讲稿(PPT90张)

关于类和对象的进一步讨论讲稿(PPT90张)
17
class Student { private: char *pName;
public:
Student()
{
{ };
pName=new char[20];
delete[] pName; }
}
~Student()
18
类和对象
数据成员 成员函数

数据成员
对 象
数据成员
对 象
19
小结
构造函数
例如:
38
类和对象
成员函数
数据成员
对 象
数据成员
对 象
39
class Time { int h,m,s; public: void SetTime (int h=0,int m=0,int s=0) {
this->h=h; this->m=m; this->s=s;
} void ShowTime() { cout<<h<<":"<<m<<":"<<s<<endl; } };
3.5.2 指向对象成员的指针 (二)指向对象成员函数的指针
2、指向对象成员函数的指针
函数调用形式: 对象. 成员函数名(实参) ( 对象. * 指针变量名 ) (实参列表) 注意: 定义时用类名,使用时用对象名
37
3.5 对象指针
3.5.3 this指针 每一个成员函数都有一个隐含的特殊指针—— this指针。 This指针的值为当前调用的该成员函数的对象的 首地址。
3.7 对象的动态建立和释放
25
3.5 对象指针
3.5.1 指向对象的指针 3.5.2 指向对象成员的指针

[IT认证]第3章关于类和对象的进一步讨论-2

[IT认证]第3章关于类和对象的进一步讨论-2

class A{ int x,y; static int z; public: void Setxy(int a, int b) { x=a; y=b;}
}; A a1, a2;
不同对象,同一空间
a1. z a2. z
a1.x
a2.x
a1.y
z a2.y
• 通过静态数据成员名前加上类名和作用域 运算符,可直接引用静态数据成员。
{ x=a; y=b;}
a1.y
};
thxis=->ax=;a; a2.x thyis=->by=;b;
...... a2.y
A a1, a2;
当我们将类的某一个数据成员的存储类型指定为静态类型 时,则该类所有对象其静态成员均共享一个存储空间,这 个空间是在编译的时候分配的。
在类定义中,用关键字static修饰的数据成员称为静 态数据成员。
void f () {Obj ob2;cout<<ob2.getVal();}
int main(){ Obj obl;
f();
Obj *ob3=new Obj;
cout<<ob3->getVal();
delete ob3;
cout<<Obj::getVal();
return0;
}
问题:写出程序输出
class A { int a;
public: int b; A(int i, int j){ a=i; b=j;} void set(int i, int j); void print() const {cout<<a<<b<<‘\n’;}
}; int main() { const A x(2,3); x.b=4; //错误 x.print; //正确 }

论述类和对象的关系

论述类和对象的关系

论述类和对象的关系类和对象是面向对象编程中非常重要的概念,它们之间存在着密切的关系。

类是对一类具有相同属性和行为的对象的抽象描述,而对象则是类的实例化结果。

首先,类可以看作是对象的模板或者蓝图。

通过定义类,我们可以明确指定对象应该具有的属性和行为。

例如,我们可以定义一个“汽车”类,它具有属性(如品牌、型号、颜色)和行为(如加速、刹车、转向),通过实例化这个类得到不同的汽车对象,每个对象都具有相同的属性和行为,但是属性的具体值可能不同。

其次,对象是类的一个实例,它具有类中定义的所有属性和行为。

可以通过操作这个对象来实现对类中属性和行为的具体操作。

例如,我们可以创建一个“奥迪A6”对象,该对象具有“汽车”类中定义的品牌为“奥迪”、型号为“A6”、颜色为“白色”的属性和加速、刹车、转向等行为。

通过调用对象的方法,我们可以让这辆车加速、刹车或者转向。

随后,类和对象之间的关系体现了抽象和具体的层次关系。

类是对一类对象的抽象描述,而对象则是类的实例化结果,具体地体现出来。

类可以看作是对一类对象的共同特征和行为的总结和归纳,而对象则是这些共同特征和行为的具体实例,通过实例化类得到。

类和对象之间的关系类似于“鸟类”和“乌鸦”之间的关系,类是对一类对象的描述,而对象则是类的实例,是实际存在的个体。

此外,通过类和对象的关系,我们可以实现代码的重复利用和模块化。

类可以看作是一个工厂,通过实例化类得到的多个对象可以执行类中定义好的方法和属性。

我们可以通过修改类的定义来改变所有对象的行为或者属性,而不需要逐个修改每一个对象。

这种代码的重复利用和模块化大大提高了代码的可维护性和可扩展性。

在实际应用中,类和对象的关系有助于简化程序的设计和开发过程。

通过定义类,我们可以将复杂的问题分解成多个相对独立的模块,每个模块负责实现特定的功能。

这样不仅使程序更易于理解和维护,而且可以实现代码的可重用性,提高开发效率。

综上所述,类和对象是面向对象编程中关键的概念,它们之间存在密切的关系。

关于类和对象的进一步讨论.ppt

关于类和对象的进一步讨论.ppt
else {
int temp=q[head]; head=(head+1)%100; return (temp); } }
main 函数的N-S 流程图:
#include <iostream>//main.cpp 主函数 #include "queue.h“ using namespace std; int main() {
引言
int i=5,j(5),k; 能否对自定义类的对象用同样的方式进行初始化呢? student stud1(1001) student stud2(1001,“张三” ) student stud3(1001,“张三”,”男”)
……
注意
类的数据成员是不能在声明类时初始化的。 Class time {
构造函数的重载
在一个类中允许定义多个构造函数,以便对类对象提 供不同的初始化的方法,共用户选用。
这些构造函数具有相同的名字,而参数的个数或参数 的类型不相同。
在类对象定义时,编译器可以依据创建对象所需要的 参数差异确定调用构造函数的哪一个版本来创建类对 象。
例P74页3.3 *.h
class box { public:
hour=0;minute=0;sec=0; }; 类并不是一个实体,而是一种抽象类型,并不占存储
空间,无法容纳数据。
对象的初始化
如果一个类中所有的成员都是public的,则可以在定义 对象时对数据成员进行初始化。
例如: class time { public: int hour,minute,sec; }; time t1={14,56,30}
if((trail+1)%100==head) cout<<"队列已满!"<<endl;

类与对象教案资料

类与对象教案资料

A a=new A();
}
}
25
class Rectangle{
int width;
int height;
void set(int w, int h) {
width=w;
height=h;
}
int area(){
int a=width*height;
return a;
}
int perimeter(){
18
void set( int w, int h) { width=w; //用形参w的值设置数据成员width的值 height=h; //用形成h的值设置数据成员height的值
} void scale( int s ) {
width=width*s; height=height*s; } }
[修饰符] 返回类型 方法名([形参列表])[ 抛出异常列表] {
语句序列 }
12
1、方法头
必须项:返回类型 方法名() 方法名() 返回类型:方法返回结果的类型。若不需要返回值,则为 void
可选项:
形参列表:
类型名 形参名1,类型名2 形成名2 ...
[ 抛出异常列表] 方法的修饰符:[public | protected | private]
3、成员方法对数据成员的访问
类的成员方法可以自由使用类的数据成员
class Rectangle{ int width; int height; void area(){ int a=width*height; System.out.println("面积为"+a); } void perimeter(){ int a=2*(width+height); System.out.println("周长为"+a); }
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8
C++面向对象程序设计
int main( ) { Time t1; //建立对象t1时,自动会去调用构造函数 t1.set_time( ) ; //对t1的数据成员赋值 t1.show_time( ); //显示t1的数据成员的值 Time t2; //建立对象t2时,自动会去调用构造函数 t2.show_time( ); //显示t2的数据成员的值 return 0; }
2
3.6 共用数据的保护
C++面向对象程序设计
【目的要求】
1、掌握用构造函数初始化对象 ; 2、理解析构函数的作用 ; 3、理静态成员、友元函数、对象的动态建立和释 放、用const修饰成员函数、类对象数组和指 针数组的使用。
【重点】
构造函数;调用构造函数和析构函数的顺序; 对象成员的使用。
【难点】
25
C++面向对象程序设计
说明: (1)应该在声明构造函数时指定默认值。 (2)语句 Box( int w=10,int h=10,int len=10 ); 可以写成 Box(int=10,int=10,int =10); (3)如果构造函数的全部参数都指定了默认值, 则在定义对象时可以给一个或几个参数,也 可以不给出实参。由于不需要参数也可以调 用构造函数,因此全部参数都指定了默认值 的构造函数也属于默认构造函数。但一个类 只能有一个默认构造函数,所以
24
C++面向对象程序设计
int main( ) { Box box1; //没有给定参数 cout<<" The volume of box1 is " <<box1.volume( )<<endl; Box box2(15); //只给定1个参数 cout<<"The volume of box2 is " <<box2.volume( )<<endl; Box box3(15,30); //只给定2个参数 cout<<"The volume of box3 is" <<box3.volume( )<<endl; Box box4(15,30,20); //给定3个参数 cout<<"The volume of box4 is " <<box4.volume() <<endl; return 0; }
构造函数初始化对象;const修饰符;对象的 赋值和复制。
3
C++面向对象程序设计
3.1 构造函数 3.1.1 对象的初始化 构造函数是在创建对象时,使用给定的 值来将对象的数据成员初始化。应当注意: 类的数据成员是不能在声明类时初始化的。 下面的写法是错误的: class Time { //不能在类定义中对数据成员初始化 int hour=0; int minute=0; int sec=0; };
5
C++面向对象程序设计
3.1.2 构造函数的作用 构造函数是一种特殊的成员函数,与其 他成员函数不同,不需要用户来调用它,而 是在建立对象时自动执行。 构造函数的名字必须与类名同名,并且 它不具有任何类型,没有返回值。 构造函数的功能是由用户自己定义的, 用户根据初始化的要求设计函数体和函数参 数。 例3.1 在例2.3的基础上定义构造函数
12
C++面向对象程序设计
由于用户不能调用构造函数,故实参是在定 义对象时给出。定义对象的一般格式为: 类名 对象名(实参1,实参2,……) 例3.2 带参数的构造函数 #include <iostream> using namespace std; class Box { public: Box( int , int , int ); //声明带参数的构造函数 int volume( ); //声明计算体积的函数
C++面向对象程序设计
第三章 关于类和对象 的进一步讨论
C++面向对象程序设计
本章主要内容
3.1 构造函数 3.2 析构函数 3.3 调用构造函数和 析构函数的顺序 3.4 对象数组 3.5 对象指针 3.7 对象的动态 建立与释放 3.8 对象的赋 值与复制 3.9 静态成员 3.10 友元 3.11 类模板
13
C++面向对象程序设计
private: int height; int width; int length; };
//在类外定义带参 //数的构造函数
Box::Box( int h , int w , int len ) { height=h; width=w; length=len; } int Box::volume( ) //定义计算体积的函数 { return( height * width * length );}
16
C++面向对象程序设计
这种方法不在函数体内对数据成员初始 化,而是在函数的首部来实现。如例3.2中定 义的构造函数可以改写为:见C3-2-2.CPP
Box::Box( int h , int w , int len ): height(h), width(w), length(len) { }
23
C++面向对象程序设计
Box::Box( int w , int h , inБайду номын сангаас len ) { height=h; width=w; //在定义函数时可以不再 指定参数的默认值 length=len; } int Box::volume( ) { return( height * width * length ); }
C++面向对象程序设计
例3.4 带默认参数的构造函数 #include <iostream> using namespace std; class Box { public: Box(int w=10,int h=10,int len=10); int volume( ); private: int height; int width; int length; };
14
C++面向对象程序设计
int main( ) { Box box1(12,25,30); //建立对象box1,并指定长宽高的值 cout<<"The volume of box1 is " <<box1.volume()<<endl; Box box2(15,30,21); //建立对象box2,并指定长宽高的值 cout<<"The volume of box2 is " <<box2.volume()<<endl; return 0; }
4
C++面向对象程序设计
如果一个类中所有的数据成员都是公有 的,则可以在定义对象时对数据成员进行初 始化(否则,不能用此方法)。如: class Time { public: int hour; int minute; int sec; }; Time t1={14,56,36}; //将t1初始化为14:56:36
6
C++面向对象程序设计
#include <iostream> using namespace std; 利用构造函数对对象 class Time 中的数据成员赋初值 { public: Time( ) //定义构造函数,函数名与类名相同 { hour=0; minute=0; sec=0; } void set_time( ); //函数声明 void show_time( ); //函数声明 private: int hour; //私有数据成员 int minute; int sec; };
11
C++面向对象程序设计
由于构造函数属于类的成员函数,它对 私有数据成员、保护的数据成员和公有的数 据成员均能进行初始化。 3.1.3 带参数的构造函数
有时用户希望对不同的对象赋予不同的 初值,则可以采用带参数的构造函数来满足 要求。带参数的构造函数首部的一般格式为:
构造函数名(类型1 形参,类型2 形参2,……)
20
C++面向对象程序设计
说明: (1)在调用构造函数时不必给出实参的构造函 数,称为默认构造函数,或缺省构造函数。 显然,无参的构造函数属于默认构造函数。 一个类只能有一个默认构造函数,否则,系 统就无法辨别应执行哪个构造函数。 如果用户未定义构造函数,则系统会自 动提供一个默认的构造函数,但它的函数体 是空的,什么事情也不做,不能初始化数据 成员。在定义类时,只要显式定义了一个类 的构造函数,则编译器就不产生缺省的构造 函数。
10
C++面向对象程序设计
对构造函数的说明: 1.构造函数的函数名必须与类名相同。构造 函数的主要作用是初始化对象的数据成员 以及其它的初始化工作。 2. 在定义构造函数时,不能指定函数返回 值的类型,也不能指定为void类型。 3. 构造函数不需要用户调用,也不能被用 户调用。什么时候调用构造函数呢? 在建立对象的时候自动调用构造函数。 4.如果用户自己没有定义构造函数,则C++ 编译系统自动生成一个构造函数。只是这 个构造函数的函数体是空的,也没有参数
7
C++面向对象程序设计
void Time::set_time( ) { cin>>hour; cin>>minute; cin>>sec; }
//定义成员函数,向数据成员赋值
void Time::show_time( ) //定义成员函数,输出数据成员的值 { cout<<hour<<":"<<minute<<":"<<sec<<endl; }
相关文档
最新文档