Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Similar documents
Strings

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

untitled

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

Strings

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

无类继承.key

Microsoft PowerPoint - L17_Inheritance_v4.pptx

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

c_cpp

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft Word - ch04三校.doc

Chapter 9: Objects and Classes

Microsoft Word - chap10.doc

untitled

Microsoft Word - 新1-12.doc

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

FY.DOC

第七讲 继承与多态

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

软件工程文档编制

第3章.doc

C 1

鋼結構在綠建築發展趨勢中之綜合評價

新版 明解C++入門編

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

山东建筑大学学分制管理规定(试行)

Chapter12 Derived Classes

C/C++语言 - C/C++数据

Microsoft PowerPoint - string_kruse [兼容模式]

untitled

提问袁小兵:

untitled

untitled

untitled

1.5招募说明书(草案)

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

Microsoft PowerPoint - 10 模板 Template.pptx

Microsoft Word cppFinalSolution.doc

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Chapter 1 What is Programing Paradigm 1

Microsoft Word - 物件導向編程精要.doc

CC213

Microsoft Word - 第7章 类与对象.docx

untitled

Microsoft PowerPoint - plan08.ppt

運算子多載 Operator Overloading

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

Microsoft PowerPoint - 07 派生数据类型

chap07.key

Factory Methods

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

程序设计语言及基础

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

ebook55-13

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

新・明解C言語入門編『索引』

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

幻灯片 1

用户大会 论文集2.2.doc

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

Microsoft PowerPoint - 04-Inheritance.ppt

绘制OpenCascade中的曲线

<4D F736F F F696E74202D20B5DA3032BDB25FC0E0BACDB6D4CFF3312E BBCE6C8DDC4A3CABD5D>

Microsoft Word - well_game.doc

Java

!"#$ % & ())*$ $ +,-./0)1)1/.21/.$ 3 4$ 5 4$ 6 789:;9< $ = :; A B CD ())* E )FG(*? H$ $ $ $ $ $ $ $ $ $ % IJ!"#% &$ KLMNO 2(* H 2G))(2 $ PQ R

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

全国计算机技术与软件专业技术资格(水平)考试

EJB-Programming-3.PDF

C++ 程式設計

Microsoft Word - CPE考生使用手冊 docx

untitled


说 : 荀 子 极 偏 驳, 只 一 句 性 恶, 大 本 已 失 5 朱 熹 说 : 荀 扬 不 惟 说 性 不 是, 从 头 到 底 皆 不 识 6 采 取 的 都 是 这 种 理 论 框 架 另 一 种 理 论 框 架 始 于 20 世 纪 前 期, 这 便 是 诸 子 学 研 究 的 框 架

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

ASP.NET实现下拉框二级联动组件

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

《C语言程序设计》教材习题参考答案

Microsoft PowerPoint - 7. 面向对象程序设计-Object-Oriented Programming.ppt [兼容模式]

提纲 1 2 OS Examples for 3

untitled

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

概述

《计算概论》课程 第十九讲 C 程序设计语言应用

슬라이드 1

Transcription:

用户定义类型 User-defined Datatypes classes and structs

几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend = 0.8; double ystart = 0.9; double yend = 1.5;

几何向量 (Geometry Vector) 传递一个向量给函数, 需要传递 4 个 double void printvector(double x0,double y0,double x1,double y1){ cout << "(" << x0 << "," << y0 << ") -> (" << x1 << "," << y1 << ")" << endl; int main( ) { double xstart = 0.4; double xend = 0.8; double ystart = 0.9; double yend = 1.5; printvector(xstart, ystart, xend, yend);

void offsetvector (double &x0, double &y0, double &x1, double &y1,double offsetx, double offsety) { x0 += offsetx; y0 += offsety; x1 += offsetx; y1 += offsety; void printvector(double x0,double y0,double x1,double y1){ cout << "(" << x0 << "," << y0 << ") -> (" << x1 << "," << y1 << ")" << endl; int main( ) { double xstart = 0.4; double xend = 0.8; double ystart = 0.9; double yend = 1.5; offsetvector(xstart, ystart, xend, yend,1.2, 2.3); printvector(xstart, ystart, xend, yend); 需要传递很多变量

类 class 用户定义类型用以将相关的信息组装在一起

类名 class Vector { double xstart ; double xend ; double ystart ; double yend ; 类 class 的定义语法 C++11 标准 class Vector { double xstart = 0.4; double xend = 0.8; double ystart = 0.9; double yend = 1.5; 表示定义一个叫做 Vector 的类, 即 Vector 是用户定义的一种新类型

类 class 的定义语法 class Vector { double xstart ; double xend ; double ystart ; double yend ; 类的属性也叫成员 表示定义一个叫做 Vector 的类, 即 Vector 是用户定义的一种新类型

Student class Student { char *name ; int stuid; 类类型 Student 具有 2 个不同类型的数据成员

类的实例 - 具体的类变量 class Student { char *name ; int stuid; void main( ){ Student stu1, stu2; stu1 stu2 name =? name =? stuid =? stuid =? 某种类类型的一个具体变量叫做这个类的一个实例

类的实例 - 具体的类变量 class Student { char *name ; int stuid; void main( ){ Student stu1, stu2; stu1.name = LiPin ; stu1 name = LiPin stu2 name =? stuid =? stuid =? 某种类类型的一个具体变量叫做这个类的一个实例

class Student { char *name ; int stuid; void main( ){ Student stu1, stu2; stu1.name = LiPin ; stu1.stuid = 1403; 类的实例 - 具体的类变量 stu1 name = LiPin stu2 name =? stuid = 1403 stuid =? 某种类类型的一个具体变量叫做这个类的一个实例

class Student { char *name ; int stuid; void main( ){ Student stu1, stu2; stu1.name = LiPin ; stu1.stuid = 1403; stu2.name = XuJie ; stu2.stuid = 1207; 类的实例 - 具体的类变量 stu1 name = LiPin stu2 name =XuJie stuid = 1403 stuid = 1207 某种类类型的一个具体变量叫做这个类的一个实例

操作成员 / 属性 (Accessing Fields) 通过 变量名. 成员名 来访问类实例的成员 ( 属性 ) clss Student { char *name ; int stuid; void main( ){ Student stu1, stu2; stu1.name = LiPin ; stu1.stuid = 1403; stu2.name = XuJie ; stu2.stuid = 1207; cout<< the name of stu1 is: << stu1.name<< \n ;

Point Vector 一个向量由 2 点 ( 起点和终点 ) 构成. class Point { double x,y; class Vector { Point start, end; void main() { Vector vec1; vec1.start.x = 3.0;

class Point { double x,y; class Vector { Point start, end; void main() { Vector vec1; vec1.start.x = 3.0; vec1.start.y = 4.0; vec1.end.x = 5.0; vec1.end.y = 6.0; Point Vector

class Point { double x,y; class Vector { Point start, end; void main() { Vector vec1; vec1.start.x = 3.0; vec1.start.y = 4.0; vec1.end.x = 5.0; vec1.end.y = 6.0; Vector vec2; vec2.start = vec1.start; vec2.start.x = 7.0; Point 类有 2 个成员 x,y Point 类的 2 个实例 start,end 作为类 Vector 的成员 Vector 类的实例 vec1. vec1 也称为类变量或对象

class Point { double x,y; class Vector { Point start, end; void main() { Vector vec1; vec1.start.x = 3.0; vec1.start.y = 4.0; vec1.end.x = 5.0; vec1.end.y = 6.0; Vector vec2; vec2.start = vec1.start; vec2.start.x = 7.0;

class Point { double x,y; class Vector { Point start, end; int main() { Vector vec; vec.start.x = 1.2; vec.end.x = 2.0; vec.start.y = 0.4; vec.end.y = 1.6;

class Point { double x,y; class Vector { Point start, end; void printvector(vector v) { cout << "(" << v.start.x << "," << v.start.y << ") -> (" << v.end.x << "," << v.end.y << ")" << endl; int main() { Vector vec; vec.start.x = 1.2; vec.end.x = 2.0; vec.start.y = 0.4; vec.end.y = 1.6; printvector(vec);

class Point { double x,y; class Vector { Point start, end; 如果不需要修改传进来的 v, 可以传值 void printvector(vector v) { cout << "(" << v.start.x << "," << v.start.y << ") -> (" << v.end.x << "," << v.end.y << ")" << endl; int main() { Vector vec; vec.start.x = 1.2; vec.end.x = 2.0; vec.start.y = 0.4; vec.end.y = 1.6; printvector(vec);

class Point { double x,y; class Vector { Point start, end; void offsetvector(vector &v, double offsetx, double offsety) { v.start.x += offsetx; v.end.x += offsetx; v.start.y += offsety; v.end.y += offsety; void printvector(vector v) { cout << "(" << v.start.x << "," << v.start.y << ") -> (" << v.end.x << "," << v.end.y << ")" << endl; int main() { Vector vec; vec.start.x = 1.2; vec.end.x = 2.0; vec.start.y = 0.4; vec.end.y = 1.6; offsetvector(vec, 1.0, 1.5); printvector(vec);

class Point { double x,y; class Vector { Point start, end; 如果要修改传进来的 v, 则传引用 void offsetvector(vector &v, double offsetx, double offsety) { v.start.x += offsetx; v.end.x += offsetx; v.start.y += offsety; v.end.y += offsety; void printvector(vector v) { cout << "(" << v.start.x << "," << v.start.y << ") -> (" << v.end.x << "," << v.end.y << ")" << endl; int main() { Vector vec; vec.start.x = 1.2; vec.end.x = 2.0; vec.start.y = 0.4; vec.end.y = 1.6; offsetvector(vec, 1.0, 1.5); printvector(vec);

类的函数成员 ( 方法 ) 类的方法 (Method) 是一种属于类的函数, 用于访问类的属性 ( 数据成员 ) Vector vec; vec.start.x = 1.2; vec.end.x = 2.0; vec.start.y = 0.4; vec.end.y = 1.6; vec.print(); vec.offset( 1.0, 1.5); 可给类方法传递参数 类的方法 (Method) 如同盒子 ( 类实例 ) 上的按钮, 当按钮被按下 ( 调用这个方法 ) 就盒子产生某种动作

类的函数成员 ( 方法 ) 类的方法 (Method) 如同盒子 ( 类实例 ) 上的按钮, 当按钮被按下 ( 调用这个方法 ) 就盒子产生某种动作

类的函数成员 ( 方法 ) 类的方法 (Method) 如同盒子 ( 类实例 ) 上的按钮, 当按钮被按下 ( 调用这个方法 ) 就盒子产生某种动作 哪一个盒子?

类的函数成员 ( 方法 ) 类的方法 (Method) 如同盒子 ( 类实例 ) 上的按钮, 当按钮被按下 ( 调用这个方法 ) 就盒子产生某种动作 哪一个按钮?

数据成员可以被方法访问

数据成员的方法也可以被调用

类方法的原型和实现的分离 如何函数的原型和实现可以分开一样, 类的函数成员 ( 方法 ) 与其原型也可以分离.h 头文件是函数原型说明,.cpp 文件是方法的实现

许多初始化是乏味的, 能否在定义类的实例时就自动进行初始化?

构造函数 (Constructors) 在类实例创建时自动调用的方法

可以接受参数 构造函数 (Constructors)

构造函数 (Constructors) 可以有多个构造函数

构造函数 (Constructors) 默认构造函数 : 无参数或参数有默认值的构造函数 class Point{ double x,y; Point(double nx = 0, double ny = 0) { x= nx; y= ny; int main(){ Point P, Q(1.2), R(2.6, 3);

构造函数 (Constructors) 一个类实例给另一个复制时, 将复制其每个成员 ( 调用默认拷贝构造函数 (default copy constructor))

构造函数 (Constructors) 你可以定义自己的拷贝构造函数

构造函数 (Constructors) 为何定义自己的拷贝构造函数? 默认的拷贝构造函数硬拷贝每个成员可能不是我们需要的! class Student { char *name ; int stuid; Student(){ name = ; stuid = 0; void main( ){ Student stu1; stu1.stuid = 98; char n[] = "foo"; stu1.name = n; Student stu2 = stu1; stu2.name[0] = 'b'; cout << stu1.name; //boo 对 stu2 的修改引起了 stu1 的改变!

构造函数 (Constructors) 为何定义自己的拷贝构造函数? 默认的拷贝构造函数硬拷贝每个成员可能不是我们需要的! class Student { char *name ; int stuid; Student(){ name = ; stuid = 0; Student(Student &o){ name = strdup(o.name); stuid = o. stuid ; void main( ){ Student stu1; stu1.stuid = 98; char n[] = "foo"; stu1.name = n; Student stu2 = stu1; stu2.name[0] = 'b'; cout << stu1.name; //foo 对 stu2 的修改不会改变 stu1!

初始化成员列表 构造函数 (Constructors) class Rectangle { int width,height; Rectangle(int,int); int area() {return width*height; Rectangle::Rectangle (int x, int y) { width=x; height=y;

初始化成员列表 构造函数 (Constructors) class Rectangle { int width,height; Rectangle(int,int); int area() {return width*height; Rectangle::Rectangle (int x, int y) : width(x) { height=y;

初始化成员列表 构造函数 (Constructors) class Rectangle { int width,height; Rectangle(int,int); int area() {return width*height; Rectangle::Rectangle (int x, int y) : width(x), height(y) {

构造函数 (Constructors) 对于没有默认构造函数的类成员, 该成员必须在初始化成员列表中初始化! class Circle { double radius; Circle(double r) : radius(r) { double area() {return radius*radius*3.14159265; class Cylinder { Circle base; double height; Cylinder(double r, double h) : base (r), height(h) { double volume() { return base.area() * height;

#include <iostream> int main () { Cylinder foo (10,20); std:: cout << "foo's volume: " << foo.volume() << '\n'; return 0;

访问修饰符 (Access Modifiers) 定义类的属性能被? 访问

访问修饰符 (Access Modifiers) public : 能从任何地方访问

访问修饰符 (Access Modifiers) private : 只能从类内部的方法访问

访问修饰符 (Access Modifiers) getters: 提供对私有数据成员的查询方法

默认的访问修饰符 (Default Access Modifiers) class: 默认是 private

默认的访问修饰符 (Default Access Modifiers) struct 默认是 public struct 是对 C 中的 struct 的扩展 ( 增加了方法 ) struct 和 class 都是定义类类型, 除了其默认访问修饰符不同!

默认的访问修饰符 (Default Access Modifiers) struct: 默认是 public class: 默认是 private

作业 定义一个表示三维向量类 Vector3, 能够完成常见的数学向量运算, 如加减 点积 差积 求长等