C++类与对象 大连理工蒋光远 第3章课件

合集下载

03_类与对象

03_类与对象
用static修饰符修饰的方法仅属于类的静态方法,又称为类方法。 (1) 非static的方法是属于某个对象的方法,在这个对象创建时,对象的方法 在内存中拥有自己专用的代码段。而static的方法是属于整个类的,它在内 存中的代码段将随着类的定义而进行分配和装载,不被任何一个对象专有。 (2) 由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的 成员变量,而只能处理属于整个类的成员变量,即static方法只能处理static 域或调用static方法。 (3) 类方法中,不能访问实例变量。在类方法中不能使用this 或super。
编一个学生类,属性有学号、姓名、年龄,要求学号自动生成,从1、2、3 、……、N。并编制测试类显示每个学生信息。 要求: 练习要求 上机要求 上机后要求 问答要求
计算机与信息技术学院
Java语言 程序设计
3.7 访问权限( 实例)
tom/U.java tom/TestAccess.java
tom/U.java tom2/TestAccess.java
Java工程师系列
计算机与信息技术学院
Java语言 程序设计
综合实例
Java工程师系列
编制基本账户类,属性有账号、密码、余额,能存款和取款。并编制简单测 试类验证方法是否正确
Java工程师系列
静态方法和静态变量的示例。
Monkey.java StaticAndInstance.java 进行内存分析。
计算机与信息技术学院
Java语言 程序设计
3.4 类中方法(方法参数)
方法的参数 基本数据类型做参数。 引用数据类型做参数。
设计并测试一个求长方体的体积和表面积的类。 练习:编制一个Circle类,定义该类的两个对象,一个成员方法显示对象信 息。

第二、三章objective-c类和对象PPT教学课件

第二、三章objective-c类和对象PPT教学课件

8
显示变量的值
NSlong不仅能显示简单的短语,还能显示变量的值以及计算的结果。 显示两个数相加的结果:
#import <Foundtion/Foundtion.h>
int main(int argc, const * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];
int n1,n2,sum;
n1 = 30;
n2 = 432
sum = n1 + n2;
第二章 Objective-c程序 设计
2020/12/10
1
第一个程序:Hello Word!
//First program example #import <Foundtion/Foundtion.h> int main(int argc, const * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init]; NSlog(@”Hello Word!”); [pool drain]; return 0; } 在Objective-C中,大小写字母是不同的。 1//First program example 注释。增强程序的可读性和维护性。 2//表示注释到这行结尾的任何字符都被编译器忽略。 3/* */表示在此区间的任何字符都被看成注释语句的一部分。不能嵌套 使用
何处开始执行
2020/12/10
4
第一个程序:Hello Word!
//First program example #import <Foundtion/Foundtion.h> int main(int argc, const * argv[]) {

C 3 对象与类 例子-PPT精品文档

C  3 对象与类 例子-PPT精品文档

Circle c2(3.0); radius=3.0; Circle c3(15.0); radius=15.0;
};构造Βιβλιοθήκη 数 定义 函数成员 定义Circle.cpp #include “Circle.h” Circle::Circle() { radius = 1.0;} Circle::Circle(double r) { radius = r;}
6
【例3-4】定义FEMALE类
访问权限用法
class FEMALE{ //缺省访问权限为private int age; //私有的, 本类函数成员和友员可访问 public: //访问权限改为public typedef char *NAME; //公有的, 都能访问 protected: //访问权限改为protected NAME nickname; //本类和派生类函数成员、友员可访问 NAME getnickname ( ) { return nickname; }; //自动内联 public: //访问权限改为public NAME name; //公有的, 都能访问 } w; void main (void) { FEMALE ::NAME n=; //任何函数都能访问公有name n=w.nickname; //错误,main不得访问保护成员 n=w.getnickname ( ) ; //错误, main不得调用保护成员 int d=w.age; //错误, main不得访问私有age }
2
示例--圆类
数据 成员 构造函数 声明 函数成员 声明
class Circle { private: double radius ; public: Circle() ; Circle(double r);

面向对象程序设计C第3章-控制结构.ppt

面向对象程序设计C第3章-控制结构.ppt

目录页
第3章 控制结构
3.2 循环语句
目录页
for循环的一些变化特点: (1)for循环语句的“初始表达式”和“变量增值表达式”可引入逗号运算符“,”,这样可以 对若干个变量赋初值或增值。 (2) for循环的三个表达式可以任意缺省,如果“条件”缺省就约定它的值是true。但不管哪个 表达式缺省,其相应的分号“;”不能缺省。 (3)可以在for循环内部声明循环控制变量。
第3章 控制结构
3.2 循环语句
假 表达式
真 循环体语句
(a)
Sum=0,i=1
假 i<=100
真 Sum+=i; i++
输出 Sum
(b)
图3-5 while语句示意图
目录页
第3章 控制结构
3.2 循环语句
【例3.6】 利用while语句,计算1+2+…+100的值,并输出计算结果。
#include "iostream.h" void main( ) { int Sum,i; Sum = 0; i = 1; while (i <= 100) { Sum += i; i++; } cout<<"Sum is "<< Sum<<endl; }
目录页
第3章 控制结构
3.1 选择结构
2. 双分支if语句
格式:
if(表达式) 语句1;
else
语句2;
功能:如果表达式的值为“真”(非0),则执行语 句1;否则执行语句2。其流程图如图3-2所示。
目录页
第3章 控制结构
3.1 选择结构

C类及对象课件

C类及对象课件
方式如下: 类名 对象名; 例如:声明类Cylinder的两个对象cyld1,cylid2 。 Cylinder cyld1,cylid2; 例如:声明对象数组。 Cylinder cylinder1[10];
19/80
对象成员的访问
成员选择运算符“.”来访问对象中的公有成员。一般形式:
对象名.数据成员名
return area;
}
22/80
void main()
{ Cylinder cylinder1,cylinder2; cylinder1.setcylinder(); cylinder2.setcylinder(10.2,15.6);
//声明圆柱体对象 //给对象cylinder1半径和高赋值 //给对象cylinder2半径和高赋值
class Cylinder { public:
函数体的定义放在类的声明内, 定义的函数就自动成为内联成员 函数。
void setcylinder(double r,double h);
double getheight();
double volume();
double surface_area();
SetTime ShowTime
int hour; int minute; int second;
8/80
声明 “圆柱体”的类
class Cylinder
{
public:
//公有成员,声明类的外部接口
void setcylinder(double r,double h); //成员函数,设置圆柱体的半径和高
cout<< " The radius of the first cylinder is:\t "<<cylinder1.getradius()<<endl;

C程序设计对象分册(第3章)PPT课件

C程序设计对象分册(第3章)PPT课件
一种是不同的对象在收到相同的消息时,产生不同 的动作;
另一种是同一对象收到相同的消息却产生不同的函 数调用。
4
多态的两种实现方式
两种表现形式分别叫做:编译时多态和运行时 多态。
编译时多态——也叫静态多态性,属于早期绑定, 在编译就实现了绑定,它是静态联编的;
实现 方式重载,包括函数重载。操作符重载
语法形式如下: 函数类型 operator 运算符(形参表) { 函数体; } 重载一元运算符没有参数;重载二元运算符只有一个参数。 一般基于某个对象调用成员函数,这个对象是一个隐含的操作数,
就是被调用的运算符函数的一个操作数,而且是第一操作数
有了运算符重载以后,当程序中出现表达式:" oCCounter2 = oCCounter2 + oCCounter1;"的时候编译程序将其解释为: "oCCounter2 = oCCounter2.operator+( oCCounter1 )"
成员函数的调用只能够通过成员函数所属的类的对象来调用,也 就是说被重载的运算符的第一操作数的类型是确定的,是隐含的, 不可改变。
10
运算符重载为类的友元函数
语法形式如下: friend 函数类型 operator 运算符(形参表) { 函数体;} 不是成员函数,也没有this指针,用友元函数
重载二元运算符(双目运算符)时,要有两个 参数;重载一元运算符(单目运算符)时,要 有一个参数。
8
3.2.2 运算符重载的实现
运算符重载的本质就是函数重载。属于静态多
态性 首先把指定的运算表达式转化为对运算符函数的调用, 运算对象转化为运算符函数的实参,然后根据实参的 类型来确定需要调用的函数. 这个过程是在编译过程 中完成的。 运算符重载形式有两种:

C面向对象程序设计第2章_类和对象PPT课件

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面向对象程序设计第3章PPT课件

C面向对象程序设计第3章PPT课件
第3章 结构化程序设计
结构化程序设计方法是由荷兰学者迪克斯特拉 提出的。结构化程序设计的基本思路是自顶向下、逐 步细化,即将一个复杂的问题划分为若干个独立的模 块,然后根据每个模块的复杂情况进一步分解成若干 个子模块,重复此过程,一直分解到各个子模块的任 务简单明确为止。这种模块化、分而治之的方法大大 提高了程序的开发效率,保证了程序的质量。结构化 程序有3种基本结构:顺序结构、选择结构和循环结 构。
3.2.1 if语句
1.单分支语句 if(表达式) {语句;} 其执行过程是:先判断表达式的值为真还是为假,如果表
达式的值为真,则执行if后面花括号中的语句或语句块;反之, 则不执行if后面花括号中的语句,继续向下执行其他语句。 2.双分支语句
if(表达式) {语句块1;}
else {语句块2;}
其执行过程是:先判断if后的表达式的值为真还是为假, 如果表达式的值为真,则执行if后面花括号中的语句或语句块; 反之,则执行else后面花括号中的语句或语句块。
3. 多分支语句
if(表达式) {
单条语句/语句块; } else if(表达式) {
单条语句/语句块; } …… else if(表达式) {
单条语句/语句块; } else {
单条语句/语句块; }
其执行过程是:先判断if后的表达式的值为真还是 为假,如果表达式的值为真,则执行if后面花括号中 的语句或语句块;反之,则依次判断多个else if 后面 的表达式的值为真还是为假,如果某个else if后面的 表达式的值为真,则执行其else if后面花括号中的语 句或语句块,以此类推,如果所有的else if后的表达 式的值均为假,执行else后面花括号中的语句或语句 块。
3.1顺序结构

Yjs_Chap3_类与对象1

Yjs_Chap3_类与对象1

Time.cpp
§2 对象
如何使用类??
数据类型和变量之间存在着联系,数据类型是模 板,变量是这种模板的一个实体。“类”类型也有 其对应的变量实体——即对象。 对象是类的实例,可看作"类"类型的变量,但对 象又不是普通的变量,对象是数据和操作的封装体。 封装的目的就是阻止非法的访问,因此对象实现了 信息的隐藏,外部只能通过操作接口/公有成员访问 对象数据。 对象属于某个已知的类,必须先定义类,然后才 能创建对象。 一般对类的使用是在类测试文件中完成的,例如在 包含main函数的文件中进行测试。
日期类的定义
说明部分
实现部分
#include <iostream.h> class CDate { public: void Disp(); //显示年月日 void SetDate(int y,int m,int d); //设置年月日 void SetYear(int y); //设置年 void GetDate(int &y,int &m,int &d); //获取年月日 int GetYear(); //获取年 int isLeapYear(); //判断某年是否为闰年 private: int year,month,day; //数据成员,分别表示年月日 }; void CDate::Disp() { cout<<year<<'.'<<month<<'.'<<day<<endl; } void CDate::SetDate(int y,int m,int d) { year=y; month=m; day=d; } void CDate::SetYear(int y) { year=y; } void CDate::GetDate(int &y,int &m,int &d) { y=year; m=month; d=day; } int CDate::GetYear() { return year; } int CDate:: isLeapYear( )//判断某年是否为闰年 { return (!(year%4) && (year%100)||!(year%400)); }

《C类和对象》PPT课件

《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

类与对象III

类与对象III
} screen& move(index r, index c){
index row = r* width; //row location cursor = row + c; return *this; }
北京大学《程序设计实习》课程
screen& set(char c){ contents(cursor) = c; return *this; }
20
北京大学《程序设计实习》课程
友元(friends)
友元:允许一个类对其非公有成员的访问权授予 制定的函数或类
class Thing {
private:
int data;
public :
friend void SetData( Thing & t, int nValue);
};
Thing t1;
2
北京大学《程序设计实习》课程
北京大学《程序设计实习》课程
北京大学《程序设计实习》课程
#include <stdio.h> class Complex {
public: float real,imag; Complex( double f ) { printf( "FloatConstructor called\n" ); real = f ; imag = 0; } Complex( int i = 0 ) { printf( "IntConstructor called\n"); real = i; imag = 0; } ~Complex() { printf( "Destructor called\n");
} };
Complex c1 ; // Complex(0) c1 = { 0,0 }; Complex c2 = 2; // Complex(2) c2= {2, 0}; Complex c3 = 2.5; // Complex(2.5) c3 = {2.5,0}; int main () { printf("c1=%f+%fi\n",c1.real ,c1.imag );

C++第3章 类和对象

C++第3章  类和对象

说明:
(1) 除了private和public之外,类中的成员还可以 用另一个关键字 protected来说明。被protected说明 的数据成员和成员函数称为保护成员。 类声明的完整格式如下:
类名{ class 类名{ public: 公有数据成员; 公有数据成员; 公有成员函数; 公有成员函数; protected: 保护数据成员; 保护数据成员; 保护成员函数; 保护成员函数; private: 私有数据成员; 私有数据成员; 私有成员函数; 私有成员函数; };
将例3.1中的结构体struct改为类class 3.1中的结构体struct改为类class。 例3.2 将例3.1中的结构体struct改为类class。 #include<iostream> using namespace std; Date{ //将例3.1中的结构体struct改为类 将例3.1中的结构体struct class Date{ //将例3.1中的结构体struct改为类 class //私有数据成员 int year; //私有数据成员 私有成员只能被类 私有成员只能被类 int month; //私有数据成员 //私有数据成员 内的成员函数访问, 内的成员函数访问, //私有数据成员 int day; //私有数据成员 而类外部的任何访 }; 问都是非法的。 问都是非法的。 int main() { Date date1; date1.year=2010;//错误,在类外不能访问私有数据在类外不能访问私有数据成员year 错误 //错误 在类外不能访问私有数据成员month 错误, date1.month=8; //错误,在类外不能访问私有数据成员month //错误 在类外不能访问私有数据成员day 错误, date1.day=25; //错误,在类外不能访问私有数据成员day cout<<date1.year<<"."<<date1.month<<".“ cout<<date1.year<<"."<<date1.month<<". //错误 错误, <<date1.day<<endl; //错误,不能访问私有数据成员 return 0; 如何才能访问类中的私有数据成员呢? 如何才能访问类中的私有数据成员呢?将 } 3.2节作详细的介绍 节作详细的介绍。 在3.2节作详细的介绍。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大连理工大学软件学院
第3章 类与对象
3.4 构造函数和析构函数
构造函数
构造函数是一种特殊的函数, 主要用来在创建对象时初始 化对象,即为对象成员数据 赋初始值。共有三个作用: 1.为对象分配空间并初试化; 2.对数据成员赋值; 3.请求其他资源。
使得每个对 象生成时各 不相同
•通常将构造函数声明为公有 成员函数(不是必须的); •构造函数的名字与类名相同, 不能任意命名; •构造函数不具有类型,无返 回值,因而不能指定包括void 在内的任何返回值类型。 。
大连理工大学软件学院
第3章 类与对象
3.2 类的定义与实现
类的实现
class Clock { private : int hour, minute, second; //关于时间的数据; public : 类外 void setClock (int h, int m, int s); 实现 void showClock ( ); }; void Clock::setClock (int h, int m, int s){ hour= ( h >=0 && h <=23)? h : 0 ; minute= ( m >=0 && m <=59)? m : 0 ; 类名+ second= ( s >=0 && s <=23)? s : 0 ; } 作用域 void Clock::showClock ( ){ 运算符 cout<<hour<<minute<<second; }
第3章 类与对象
3.3 对象定义及访问
例3.2 两点距离(代码分离) 把类的设计、实现和使用完 全分离开来,程序结构更加 合理,便于项目的团队研发。
源文件main.cpp对类的使用: //ch3_2.cpp #include<iostream> #include<cmath> #include"point.h" using namespace std; void main(){ Point p1,p2; p1.setX(2);p1.setY(2); p2.setX(5);p2.setY(6); cout<<p1.distance(p2); }
内联函数体中包含复 杂结构,声明为内联 函数,编译系统也不 会按照内联函数处理
大连理工大学软件学院
第3章 类与对象
3.3 对象定义及访问
对象的定义
1. 在定义类的同时直接定义对象 class Clock { private : int hour, minute, second; //关于时间的数据; public : void setClock(int h, int m, int s){…} void showClock ( ){…} } clock1,clock2;
第3章 类与对象
3.2 类的定义与实现
类的定义
1.类class是定义面向对象程序模块的数据类型,是“模板” 2.类的定义是声明一个数据结构,而不是定义一个函数,定 义的最后有分号结束。 3.说明类成员访问权限的关键字private、protected和public 可以按任意顺序、任意出现多次,一个成员只能有一种访问 权限。 4.不能在类内给数据成员赋初值,只有给对象数据成员赋初 值。 5. 成员函数可以重载,Clock中可以定义多个set函数: void setClock(int h, int m, int s); //用来设置时、分、秒 void setClock (int h, int m); //用来设置时、分 void setClock (int h); //用来设置时
大连理工大学软件学院
第3章 类与对象
3.3 对象定义及访问
例3.2 两点距离(代码分离) 源文件point.cpp包含类实现: //point.cpp #include<iostream> #include<cmath> #include"point.h" using namespace std; double Point::distance(Point & p){ return sqrt((p.x-x)*(p.x-x)+(p.yy)*(p.y-y)); } void Point::setX(double i){x=i;} void Point::setY(double j){y=j;}
大连理工大学软件学院
第3章 类与对象
3.1 理解类
大连理工大学软件学院
第3章 类与对象
3.1 理解类
类是具有相同或相似性质的对象的抽象。抽象是从 众多的事物中抽取出共同的、本质性的特征,而舍弃其 非本质的特征的过程。
类还起到封装的作用,封装有两个含义: 一是把对象的全部属性和行为结合在一起,形成一 个不可分割的独立单位; 二是尽可能隐蔽对象的内部属性和实现细节,对外 形成一道屏障,与外部的联系只能通过公共接口实现。
பைடு நூலகம்大连理工大学软件学院
头文件point.h包含类定义: //point.h class Point { public: double distance(Point & p); void setX(double i); void setY(double j); private: double x; double y; };
大连理工大学软件学院
第3章 类与对象
3.2 类的定义与实现
类的定义
class TimeBomb { private : Clock timer; int explosive; …… public : void setTime(); …… };
//关于定时器的数据; //炸药量
//设置爆炸时间;
大连理工大学软件学院
大连理工大学软件学院
第3章 类与对象
3.3 对象定义及访问
对象的定义 每个对象有各自的 空间
对象空间 clock1 hour minute second 1 2 3 hour minute second clock2 4 5 6
Clock clock1,clock2; clock1.setClock(1,2,3); clock2.setClock(4,5,6);
大连理工大学软件学院
第3章 类与对象
3.3 对象定义及访问
对象的定义
2.在定义类的同时直接定义对象,并且不给类命名 class 此处无类名 { private : int hour, minute, second; //关于时间的数据; public : void setClock(int h, int m, int s){…} void showClock ( ){…} } clock1,clock2;
大连理工大学软件学院
第3章 类与对象
3.3 对象定义及访问
对象的定义
3.定义类以后,在使用对象之前再定义对象 class Clock { private : int hour, minute, second; //关于时间的数据; public : void setClock(int h, int m, int s){…} void showClock ( ){…} 另外一条语句定义; }; 这种方式最常用 Clock clock1,clock2;
大连理工大学软件学院
第3章 类与对象
3.2 类的定义与实现
类的实现
class Clock { private : int hour, minute, second; //关于时间的数据;类内 public : 实现 void setClock (int h, int m, int s){ hour= ( h >=0 && h <=23)? h : 0 ; minute= ( m >=0 && m <=59)? m : 0 ; second= ( s >=0 && s <=23)? s : 0 ; } void showClock ( ){ cout<<hour<<minute<<second; } };
第3章 类与对象
3.3 对象定义及访问
对象访问
对象的访问是指对对象成员的使用,可以通过成员运算符“.”和指 向成员运算符“->”访问,针对对象、指针和引用:
1
通过对象访问: 对象名.数据成员 对象名.成员函数(实参表)
2
通过指针访问: 指向对象的指针->数据成员 指向对象的指针->成员函数 (实参表) (*指向对象的指针) .数据成员 (*指向对象的指针) .成员函数 (实参表)
大连理工大学软件学院
第3章 类与对象
3.4 构造函数和析构函数
构造函数
定义构造函数的语法格式为: 构造函数名(形参):初始化 列表 { 函数体 } 初始化列表格式为: 成员名(实参)[, 成员名(实 参)…] Clock(int h , int m , int s ): hour(h),minute(m){ second=s; }
大连理工大学软件学院
第3章 类与对象
3.2 类的定义与实现
类的实现
1. 类内实现为内联函数 2. 类外实现加inline为内联函数,如: inline void Clock::showClock ( ){ cout<<hour<<minute<<second; }
内联函数不调用, 而是编译时代码 嵌入主调函数
大连理工大学软件学院
第3章 类与对象
3.3 对象定义及访问
例3.1 计算两点之间的距离
class Point void main(){ 同一类定义的对象,可以相互整体赋 { Point p1,p2; 值,赋值运算符仍是“=”,所有数 public: p1.setX(2);p1.setY(2); 据成员都会逐位拷贝,两个对象的数 double distance(Point & p) { p2.setX(5);p2.setY(6); 据成员的值相同,彼此相互独立的, return sqrt((p.x-x)*(p.xcout<<p1.distance(p2); 各自都有自己的内存空间。引用不会 x)+(p.y-y)*(p.y-y)); } } 赋值。此处调用复制构造函数后面会 void setX(double i){x=i;} 讲。 void setY(double j){y=j;} distance参数必须引用吗? private: double x; distance怎样调用? double y; }; p.x 对象名.私有成员?
相关文档
最新文档