C语言程序设计基础-类与对象 56页PPT文档
合集下载
c语言程序设计1(基础知识)精品PPT课件

}
输出格式控制
例3:
#include <stdio.h>
main( )
{ int a,b,c;
/* 定义变量 */
a=5;
b=3;
/* 赋值,将赋值号后面的数据送到其 前面的变量中 */
c=a*b;
printf(“c=%d”,c); /* 格式化输出函数 */
}
变量占有一片可用于存放数据的内存空间,空间 的大小决定于它要存放什么样的数据。变量的值可 变。
scanf(“%d%d%d”, &a, &b, &c);; printf(“%d,%d,%d\n”, a, b, c); }
输入:3^4^5↙ 用空格或回车或跳格间隔
输出:3,4,5
例6:P23 将输入的角度转换成弧度。
#include <stdio.h> main( ) {
int degree; float radian;
➢ 当程序运行时,系统将率先自动调用主函数。
例1:输出文本行 This is a C program.
头文件
主函数
(程序入口) #include <stdio.h> /*预处理命令*/ main( ) /*C语言程序的标志,主函数*/
标准函数 { (用于输出) printf(“\nThis is a C program.”
3、字符型 仅含有一个字符的数据类型。 字符类型的名称是 char 1个字节
常量 — 程序运行中,值不能被改变的量。
1、整型常量
➢ 十进制整数 0 9中的若干数字,最高位不 能是0
➢ 八进制整数 以0开头,跟07中的若干个数 字。例如,0634、023、07765。
C语言程序设计基础-类与对象

程序设计基础
类与对象
程序设计基础
基本概念
世界的万事万物都是由对象构成的!
有形的东西
无形的东西
程序设计基础
对象的两个方面: (1) 静态特征; (2) 动态行为;
例如: 张三今年28岁、男、未婚、176cm 这些称为对象的<属性attribute>。
例如: 张三可以吃饭、骑车、跳舞等。 这些称为对象的<操作operate>。
};
C c1; C c2("foo"); cout<<'\n'; } C*ptr=new C(); delete ptr; return 0;
}
程序设计基础
hort construct anony construct foo construct
foo destruct anony destruct anony construct anony destruct hort destruct
属性: 反映对象静态特征。
狗 重量 体长 叫 跑 操作: 反映对象动态行为。
程序设计基础
类:在C++中是如何用代码来定义的呢?
属性:
成员变量:
反映对象静态特征。
int m_weight; int m_length;
成员函数: void shout();
狗 重量 体长 叫
跑
void run();
操作:
2、函数返回一个对象时,要使用返回值初始化一个隐藏对象, 调用拷贝初始化构造函数,该隐藏对象的生存期结束,同样调 用它的析构函数
#include <iostream.h> class Point{
Point::Point(Point &p)
类与对象
程序设计基础
基本概念
世界的万事万物都是由对象构成的!
有形的东西
无形的东西
程序设计基础
对象的两个方面: (1) 静态特征; (2) 动态行为;
例如: 张三今年28岁、男、未婚、176cm 这些称为对象的<属性attribute>。
例如: 张三可以吃饭、骑车、跳舞等。 这些称为对象的<操作operate>。
};
C c1; C c2("foo"); cout<<'\n'; } C*ptr=new C(); delete ptr; return 0;
}
程序设计基础
hort construct anony construct foo construct
foo destruct anony destruct anony construct anony destruct hort destruct
属性: 反映对象静态特征。
狗 重量 体长 叫 跑 操作: 反映对象动态行为。
程序设计基础
类:在C++中是如何用代码来定义的呢?
属性:
成员变量:
反映对象静态特征。
int m_weight; int m_length;
成员函数: void shout();
狗 重量 体长 叫
跑
void run();
操作:
2、函数返回一个对象时,要使用返回值初始化一个隐藏对象, 调用拷贝初始化构造函数,该隐藏对象的生存期结束,同样调 用它的析构函数
#include <iostream.h> class Point{
Point::Point(Point &p)
C 类与对象.ppt

5.1.1 定义结构和访问结构
1.定义结构
➢ 说明 (2) 一个结构类型的成员
可以是另一个已定义的结构类型
错误 不能实现的无穷递归结构
struct person { char name [ 10 ] ;
long code ; float salary ; char address [ 50 ] ; char phone [ 11 ] ;
5.1 结构
➢结构是用户自定义的数据类型 ➢结构由数目固定的成员构成 ➢ 各成员可以具有不同的数据类型 ➢ 一个结构变量在内存占有一片连续的存储空间
5.1.1 定义结构和访问结构
1.定义结构
结构类型定义形式为: struct 标识符 { 类型 成员1 ; 类型 成员2 ;
…
类型 成员n ;
};
例:
person allone[6] ;
// 结构数组声明
void main ( ) { int i ; person temp ;
for ( i = 0 ; i < 6 ; i ++ )
// 结构变量声明 // 输入数据
{ cout << i << ": name: " ; cgets ( allone[i].name ) ;
2.访问结构
5.1.1 定义结构和访问结构
(3)类型相同的结构变量可以整体赋值
“类型相同的变量” 是指用同一类型标识符说明的变量
例如: struct weather1
{ double temp; double wind; } yesterday ; struct weather2 { double temp; double wind; } today ;
C语言程序设计教程ppt课件完整版pptx

C语言的应用领域
计算机系统基本概念
计算机系统的组成 操作系统的基本概念 计算机中的数与编码
编程环境与工具安装配置
01
常见的C语言编程环境
02
安装与配置C语言编译器
使用集成开发环境(IDE)进行C语言编程
03
第一个C程序:Hello, World!
01
C程序的基本结 构
02
编写Hello, World!程序
应用场景
适用于需要根据特定条件提前终 止循环或跳过某些循环操作的情 况。
04 函数与模块化设计
函数定义和调用
01
函数定义
包括函数名、参数列表、返回值 类型和函数体等部分,用于描述 函数的功能和实现细节。
函数调用
02
03
函数声明
通过函数名和参数列表来调用函 数,实现相应功能并获取返回值 。
在使用函数之前,需要对函数进 行声明,以便编译器识别函数的 存在和调用方式。
THANKS FOR WATCHING
感谢您的观看
指针运算符
包括取地址运算符&和取值运算符*,分别 用于获取变量的内存地址和通过指针访问内 存中的数据。
动态内存分配函数(malloc, free)使用方法
malloc函数
用于在堆区动态分配指定大小的内存空间,并返回 分配内存的起始地址。
free函数
用于释放之前通过malloc函数分配的内存空间,防 止内存泄漏。
动态规划思想
动态规划是一种在数学、计算机科学和经济学中 使用的,通过把原问题分解为相对简单的子问题 的方式来求解复杂问题的方法。动态规划常用于 优化重叠子问题的计算。
回溯与分支限界法
回溯法是一种通过探索所有可能的候选解来找出 所有解的算法,而分支限界法是一种通过剪枝来 减少搜索空间的优化算法。回溯与分支限界法常 用于解决组合优化问题。
计算机系统基本概念
计算机系统的组成 操作系统的基本概念 计算机中的数与编码
编程环境与工具安装配置
01
常见的C语言编程环境
02
安装与配置C语言编译器
使用集成开发环境(IDE)进行C语言编程
03
第一个C程序:Hello, World!
01
C程序的基本结 构
02
编写Hello, World!程序
应用场景
适用于需要根据特定条件提前终 止循环或跳过某些循环操作的情 况。
04 函数与模块化设计
函数定义和调用
01
函数定义
包括函数名、参数列表、返回值 类型和函数体等部分,用于描述 函数的功能和实现细节。
函数调用
02
03
函数声明
通过函数名和参数列表来调用函 数,实现相应功能并获取返回值 。
在使用函数之前,需要对函数进 行声明,以便编译器识别函数的 存在和调用方式。
THANKS FOR WATCHING
感谢您的观看
指针运算符
包括取地址运算符&和取值运算符*,分别 用于获取变量的内存地址和通过指针访问内 存中的数据。
动态内存分配函数(malloc, free)使用方法
malloc函数
用于在堆区动态分配指定大小的内存空间,并返回 分配内存的起始地址。
free函数
用于释放之前通过malloc函数分配的内存空间,防 止内存泄漏。
动态规划思想
动态规划是一种在数学、计算机科学和经济学中 使用的,通过把原问题分解为相对简单的子问题 的方式来求解复杂问题的方法。动态规划常用于 优化重叠子问题的计算。
回溯与分支限界法
回溯法是一种通过探索所有可能的候选解来找出 所有解的算法,而分支限界法是一种通过剪枝来 减少搜索空间的优化算法。回溯与分支限界法常 用于解决组合优化问题。
C面向对象程序设计第2章_类和对象PPT课件

成 员
float score;
void display( )//函数成员
{
<<endl;
cout<<”number: ”<< number; 成
cout<<”name: ”<< name;
员
cout<<”score: ”<< score
函
数
}
};
11
一个复数结构的例子
struct complex{ double real; double image; void init(double r,double i) { real=r; image=i; } double realcomplex() { return real; } …;
公有的。 • 此处所指成员包括数据成员和成员函数。
13
私有成员和公有成员的声明
struct complex{ private:
double real; double image; public: void init(double r,double i) { real=r; image=i; } double realcomplex( ) { return real; } …; };
/*独立函数display */
{
void display(Student * stu)
cout<<”number: ”<< number; 成
{
cout<<”name: ”<< name;
员
printf(”number:%d”,stu->number);
cout<<”score: ”<< score
C程序设计基础PPT课件

03
栈和队列
栈和队列是两种特殊的数据结构,栈是一种后进先出的数据结构,队列是一种先进先出的数据结构。
数据结构基础
01
数据结构的基本概念
数据结构是计算机中存储和组织数据的方式,它包括数据的逻辑结构和物理结构。
02
数组和链表
数组和链表是两种基本的数据结构,数组是一种连续存储的数据结构,链表是一种非连续存储的数据结构。
链表是一种非连续存储的数据结构,它通过指针链接不同的节点。
链ቤተ መጻሕፍቲ ባይዱ的基本概念
链表的节点包括数据域和指针域,数据域存储数据,指针域存储下一个节点的地址。
链表的节点结构
链表的创建和销毁包括头插法、尾插法和删除等操作。
链表的创建和销毁
链表
栈的基本概念
栈与队列
栈的基本操作
队列的基本概念
队列的基本操作
06
C程序设计实例
要点一
要点二
关键字
C语言有32个关键字,这些关键字具有特殊含义,不能被用作变量名或函数名,包括if、else、while、for、switch等。
标识符与关键字
数据类型
C语言有多种数据类型,包括整型、浮点型、字符型、指针等,这些数据类型用于存储不同类型的数据。
变量
变量是用来存储数据的容器,每个变量都有一个名称和对应的数据类型,在C语言中,必须先定义变量的类型和名称,然后才能使用。
结构体的引用与操作
05
文件操作与数据结构
1
文件操作基础
2
3
文件是计算机中用于存储数据的单位,文件操作包括文件的创建、读取、写入、删除等。
文件操作的基本概念
文件的基本操作包括文件的打开、关闭、读取、写入等。
《C类和对象》PPT课件

CRation::CRation( long n, long d )
{
// 对象创建时被调用
this->n = n; // this是指向当前对象的指针
this->d = d;
}
void CRation::Print( void ) {
cout << n << "/" << d << endl; }
//exam.cpp Date类的测试程序
#include <iostream.h> #include "date.h" void main() {
Date k(2000,12,1); cout<<k.getMonth()<<endl; }
对象创建时,为数据成员分配存储空间 调用类的构造函数 对象生命周期结束时,调用类的析构函数
对象成员构造函数的调用顺序取决于这些对象成 员在类中的说明顺序
析构函数的调用顺序与构造函数相反
#include "Date.h"
class Student_Info {
int No; char Name[20]; char Sex; Date Birthday; public: Student_Info(int n,char *a,char s,int y,int m,int d); Student_Info( ); int GetNo( ); char * GetName( ); char GetSex( ); …… };
程序结构
一般分为三个文件: 1)将类的说明作为头文件 .h
2)将类的成员函数的实现放一个文件 .cpp 3) 对类的使用放一个文件,包括main .cpp
C语言程序设计基础PPT参考幻灯片

(2) 流程图
起止框
处理框
输入/输出框
流程线
判断框
连接点
13
2.1 算法与程序设计步骤
一、算法及其表示
(2)流程图
0 => s
将例2 求1+2+3+4+…+10 用流程图进行描述。
1 => n s+n => s
n+1 => n
是 n ≤ 10
否
输出s
14
2.1 算法与程序设计步骤
一、算法及其表示
6
2.1 算法与程序设计步骤
自然语言的“歧义性”
• 我国古时候没有标点符号,文章读起来很吃力,甚 至被人误解。直到汉朝才发明了“句读”符号,语 言完整的一小段为“句”;句中语意未完,语气可 停的一小段为“读”(音逗)。宋朝使用 “。”“,”来表示句读。明代才出现了人名号和 地名号,这些就是我国最早的标点符号。
2、精度:
单精度(后缀F):6位有效数字,如:0.0123456789012F
双精度:15位有效数字,如:0.0123456789012345
无后缀实数的精度缺省为双精度。
27
2.3 常量和变量 ——常量
三、字符常量
字符常量的界定符为一对单引号,表示一个单字节字符 1、普通字符:'a' 'A' '0' ' ' '+' '"'
(e)
是 c>max
否
cmax
空
(f)
输入a、b、c
S2.1 是
a>b
否
amax bmax
起止框
处理框
输入/输出框
流程线
判断框
连接点
13
2.1 算法与程序设计步骤
一、算法及其表示
(2)流程图
0 => s
将例2 求1+2+3+4+…+10 用流程图进行描述。
1 => n s+n => s
n+1 => n
是 n ≤ 10
否
输出s
14
2.1 算法与程序设计步骤
一、算法及其表示
6
2.1 算法与程序设计步骤
自然语言的“歧义性”
• 我国古时候没有标点符号,文章读起来很吃力,甚 至被人误解。直到汉朝才发明了“句读”符号,语 言完整的一小段为“句”;句中语意未完,语气可 停的一小段为“读”(音逗)。宋朝使用 “。”“,”来表示句读。明代才出现了人名号和 地名号,这些就是我国最早的标点符号。
2、精度:
单精度(后缀F):6位有效数字,如:0.0123456789012F
双精度:15位有效数字,如:0.0123456789012345
无后缀实数的精度缺省为双精度。
27
2.3 常量和变量 ——常量
三、字符常量
字符常量的界定符为一对单引号,表示一个单字节字符 1、普通字符:'a' 'A' '0' ' ' '+' '"'
(e)
是 c>max
否
cmax
空
(f)
输入a、b、c
S2.1 是
a>b
否
amax bmax
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return aa; }
A X=4512801 Y=9324502
ret(A)=C;
C X=15081 Y=92402
call ret(A)=C
程序设计基础
对象的类别: 1、局部对象 :对象定义时,对象被创建,当程序退出
定义该对象所在的函数体或程序块,对象被释放。 2、全局对象:当程序开始运行时,对象被创建,当程序
public:
Y=p.Y;
Point(int a=0, int b=0) {X=a; Y=b;cout<<
cout<<"Copy
"Initializing “<<X<<”,“<<Y<<endl;} //构造函数 Initializing "
Point(Point &p); //拷贝构造函数 int GetX() {return X;}
保护成员说明
};
程序设计基础
class CDog { public:
void Run(); void Shout();
private: int m_weight; int m_length;
};
声明(Declaration): (1)定义属性(成员变量) (2)定义操作(成员函数) (3)确定属性和操作的可见性。
ptr->setname("C++");
程序设计基础
public + (接口)
能被类的客户(类对象的使用者)访问
访
也能被类本身的成员函数及该类的友元访问
问
private - (隐藏)
限
不能被类的客户(类对象的使用者)访问
制
只能被类本身的成员函数及该类的友元访问
protected # (隐藏) 不能被类的客户(类对象的使用者)访问
程序设计基础
对象实例 对象定义的一般形式: 类型 对象名; 例如: Person p;
对象成员的引用
对象使用的两种基本形式(注意成员的访问权限) 1、对象名.成员名; ; //×私有成员
p.setname("C++");
2、对象指针名->成员名; Person *ptr=&p; ptr->name;//×私有成员
属性: 反映对象静态特征。
狗 重量 体长 叫 跑 操作: 反映对象动态行为。
程序设计基础
类:在C++中是如何用代码来定义的呢?
属性:
成员变量:
反映对象静态特征。
int m_weight; int m_length;
成员函数: void shout();
狗 重量 体长 叫
跑
void run();
操作:
程序设计基础
数据成员定义形式: 类型 数据成员名; string name; int age;
成员定义
setname getname
Person name,age
成员函数定义形式:
[1] (类内声明,类内定义) 返回类型 成员函数名(形参表) { 函数体 }
void setname (string n) { name=n;}
<<X<<","<<Y <<endl; }
int GetY() {return Y;}
void Show(){cout<<"X="<<X<<",Y="<<Y<<endl;}
~Point(){cout<<"delete..."<<X<<","<<Y<<endl;}
};
程序设计基础
Point::Point(Point &p) {
特征: 1 与类同名,之前冠以波浪号,以区别于构造函数; 2 不指定返回类型; 3 不能指定参数。 4 如无定义,系统会自动生成缺省的析构函数 5 在对象撤消时被自动调用
程序设计基础
构造函数和析构函数
两种隐含的使用位置:
1、在传值调用中,初始化形参要调用拷贝初始化构造函数, 在被调函数返回时,形参的生存期结束,它的析够函数被调用
对象将自己的细节隐蔽起来,只向其他对象提供接口。
程序设计基础
面向对象的特征——继承特征: 一种类型的东西可以是来自于另外一种类型,即层次性。
动物
生物
植物
程序设计基础
面向对象的特征——多态特征: 发送同一消息,发生了不同的行为。
比如: 下课铃声响了
程序设计基础
定义
类:对具有共同特性所有对象的抽象。
};
这样的函数称为构造函数和析构函数
程序设计基础
1、构造函数
构造函数和析构函数
创建对象时工作:
• 给对象一个标识符;
• 给对象开辟一个内存空间;
• 将对象中的数据成员初始化。
通过说明语句调用 构造函数来实现
特征:1. 与类同名的成员函数 2. 无返回类型 3. 可重载 4. 如无定义,系统会自动生成缺省的构造函数 5. 构造函数在创建对象时被系统自动调用
};
C c1; C c2("foo"); cout<<'\n'; } C*ptr=new C(); delete ptr; return 0;
}
程序设计基础
hort construct anony construct foo construct
foo destruct anony destruct anony construct anony destruct hort destruct
} 拷贝初始化构造函数
disp(B,C);
p1
p2
Copy Initializing 58,94 Copy Initializing 42,35 X=42,Y=35 X=58,Y=94 delete...42,35 delete...58,94
X=42 Y=35
X=58 Y=94
程序设计基础
Point fun() { Point A(101,202); return A; }
程序设计基础
对象的分类(类的概念): 把所有具有相同特征和行为的对象全部归为某个类。
例如: 张三归为“人”类。 地球归为“行星”类。 某个时刻归为“时间”类。
程序设计基础
四大基本特征
面向对象的特征——抽象特征: 可以把对象分门别类,即通过类概括属于该类的一切对象。
程序设计基础
面向对象的特征——封装特征:
程序设计基础
void display(Point& p) {
p.Show(); }
pB X=42 Y=35
display(B);
X=42,Y=45
程序设计基础
void disp(Point p1,Point p2 )
B {
X=42
p1.Show();
Y=35
p2.Show();
C X=58 Y=94
程序设计基础
class Person{ public:
Person(){age=0;} Person(unsigned n){age=n;} Person(Person& p){age=p.age;} void setAge(unsigned n){age=n;} unsigned getAge()const {return age;} private: unsigned age; };
对象的初始化
1、对象成员的初始化 对象成员:在一个类中声明具有类类型的数据成员
结束时,对象被释放。 3、静态对象:当程序定义静态对象时,对象被创建,当
程序结束时,对象被释放。 4、动态对象:当程序定义动态对象时,对象被创建,当
函数结束或者复合语句结束时,对象被释放。
执行运算符new时创建的对象也是动态对象,其 在执行运算符delete时被释放。
程序设计基础
class C
int main()
2、函数返回一个对象时,要使用返回值初始化一个隐藏对象, 调用拷贝初始化构造函数,该隐藏对象的生存期结束,同样调 用它的析构函数
#include <iostream.h> class Point{
Point::Point(Point &p)
{//定义拷贝构造函数
private: int X,Y;
X=p.X;
其他类型
某类类型
p1=50; p1
age 50
临时对象 age 50
调用构 造函数
50
程序设计基础
拷贝构造函数: 如果不提供,编译器会自动生成一个,完成将源对象的所有 数据成员逐一赋值给目标对象相应的数据成员。
Person p3(p2);
p2 age 10
p3 age 10
程序设计基础
2、析构函数 析构函数任务:清理工作,如释放由构造函数分配的内存等
{private: string name;
{
C c0("hort");
public:
{
C(){name="anony"; cout<<name<<“ construct\n";}
C(const char*n){name=n; cout<<name<<“ construct\n";}
~C(){cout<<name<<“ destruct\n";}
A X=4512801 Y=9324502
ret(A)=C;
C X=15081 Y=92402
call ret(A)=C
程序设计基础
对象的类别: 1、局部对象 :对象定义时,对象被创建,当程序退出
定义该对象所在的函数体或程序块,对象被释放。 2、全局对象:当程序开始运行时,对象被创建,当程序
public:
Y=p.Y;
Point(int a=0, int b=0) {X=a; Y=b;cout<<
cout<<"Copy
"Initializing “<<X<<”,“<<Y<<endl;} //构造函数 Initializing "
Point(Point &p); //拷贝构造函数 int GetX() {return X;}
保护成员说明
};
程序设计基础
class CDog { public:
void Run(); void Shout();
private: int m_weight; int m_length;
};
声明(Declaration): (1)定义属性(成员变量) (2)定义操作(成员函数) (3)确定属性和操作的可见性。
ptr->setname("C++");
程序设计基础
public + (接口)
能被类的客户(类对象的使用者)访问
访
也能被类本身的成员函数及该类的友元访问
问
private - (隐藏)
限
不能被类的客户(类对象的使用者)访问
制
只能被类本身的成员函数及该类的友元访问
protected # (隐藏) 不能被类的客户(类对象的使用者)访问
程序设计基础
对象实例 对象定义的一般形式: 类型 对象名; 例如: Person p;
对象成员的引用
对象使用的两种基本形式(注意成员的访问权限) 1、对象名.成员名; ; //×私有成员
p.setname("C++");
2、对象指针名->成员名; Person *ptr=&p; ptr->name;//×私有成员
属性: 反映对象静态特征。
狗 重量 体长 叫 跑 操作: 反映对象动态行为。
程序设计基础
类:在C++中是如何用代码来定义的呢?
属性:
成员变量:
反映对象静态特征。
int m_weight; int m_length;
成员函数: void shout();
狗 重量 体长 叫
跑
void run();
操作:
程序设计基础
数据成员定义形式: 类型 数据成员名; string name; int age;
成员定义
setname getname
Person name,age
成员函数定义形式:
[1] (类内声明,类内定义) 返回类型 成员函数名(形参表) { 函数体 }
void setname (string n) { name=n;}
<<X<<","<<Y <<endl; }
int GetY() {return Y;}
void Show(){cout<<"X="<<X<<",Y="<<Y<<endl;}
~Point(){cout<<"delete..."<<X<<","<<Y<<endl;}
};
程序设计基础
Point::Point(Point &p) {
特征: 1 与类同名,之前冠以波浪号,以区别于构造函数; 2 不指定返回类型; 3 不能指定参数。 4 如无定义,系统会自动生成缺省的析构函数 5 在对象撤消时被自动调用
程序设计基础
构造函数和析构函数
两种隐含的使用位置:
1、在传值调用中,初始化形参要调用拷贝初始化构造函数, 在被调函数返回时,形参的生存期结束,它的析够函数被调用
对象将自己的细节隐蔽起来,只向其他对象提供接口。
程序设计基础
面向对象的特征——继承特征: 一种类型的东西可以是来自于另外一种类型,即层次性。
动物
生物
植物
程序设计基础
面向对象的特征——多态特征: 发送同一消息,发生了不同的行为。
比如: 下课铃声响了
程序设计基础
定义
类:对具有共同特性所有对象的抽象。
};
这样的函数称为构造函数和析构函数
程序设计基础
1、构造函数
构造函数和析构函数
创建对象时工作:
• 给对象一个标识符;
• 给对象开辟一个内存空间;
• 将对象中的数据成员初始化。
通过说明语句调用 构造函数来实现
特征:1. 与类同名的成员函数 2. 无返回类型 3. 可重载 4. 如无定义,系统会自动生成缺省的构造函数 5. 构造函数在创建对象时被系统自动调用
};
C c1; C c2("foo"); cout<<'\n'; } C*ptr=new C(); delete ptr; return 0;
}
程序设计基础
hort construct anony construct foo construct
foo destruct anony destruct anony construct anony destruct hort destruct
} 拷贝初始化构造函数
disp(B,C);
p1
p2
Copy Initializing 58,94 Copy Initializing 42,35 X=42,Y=35 X=58,Y=94 delete...42,35 delete...58,94
X=42 Y=35
X=58 Y=94
程序设计基础
Point fun() { Point A(101,202); return A; }
程序设计基础
对象的分类(类的概念): 把所有具有相同特征和行为的对象全部归为某个类。
例如: 张三归为“人”类。 地球归为“行星”类。 某个时刻归为“时间”类。
程序设计基础
四大基本特征
面向对象的特征——抽象特征: 可以把对象分门别类,即通过类概括属于该类的一切对象。
程序设计基础
面向对象的特征——封装特征:
程序设计基础
void display(Point& p) {
p.Show(); }
pB X=42 Y=35
display(B);
X=42,Y=45
程序设计基础
void disp(Point p1,Point p2 )
B {
X=42
p1.Show();
Y=35
p2.Show();
C X=58 Y=94
程序设计基础
class Person{ public:
Person(){age=0;} Person(unsigned n){age=n;} Person(Person& p){age=p.age;} void setAge(unsigned n){age=n;} unsigned getAge()const {return age;} private: unsigned age; };
对象的初始化
1、对象成员的初始化 对象成员:在一个类中声明具有类类型的数据成员
结束时,对象被释放。 3、静态对象:当程序定义静态对象时,对象被创建,当
程序结束时,对象被释放。 4、动态对象:当程序定义动态对象时,对象被创建,当
函数结束或者复合语句结束时,对象被释放。
执行运算符new时创建的对象也是动态对象,其 在执行运算符delete时被释放。
程序设计基础
class C
int main()
2、函数返回一个对象时,要使用返回值初始化一个隐藏对象, 调用拷贝初始化构造函数,该隐藏对象的生存期结束,同样调 用它的析构函数
#include <iostream.h> class Point{
Point::Point(Point &p)
{//定义拷贝构造函数
private: int X,Y;
X=p.X;
其他类型
某类类型
p1=50; p1
age 50
临时对象 age 50
调用构 造函数
50
程序设计基础
拷贝构造函数: 如果不提供,编译器会自动生成一个,完成将源对象的所有 数据成员逐一赋值给目标对象相应的数据成员。
Person p3(p2);
p2 age 10
p3 age 10
程序设计基础
2、析构函数 析构函数任务:清理工作,如释放由构造函数分配的内存等
{private: string name;
{
C c0("hort");
public:
{
C(){name="anony"; cout<<name<<“ construct\n";}
C(const char*n){name=n; cout<<name<<“ construct\n";}
~C(){cout<<name<<“ destruct\n";}