第七章 操作符重载 胡昊 南京大学计算机系软件所.

Slides:



Advertisements
Similar presentations
程序设计实习 3月份练习解答
Advertisements

第一章 面向对象程序设计.
第11章 使用类.
類別與物件 Class & Object.
第三章 控制结构.
程式設計實作.
复习与总结.
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
Derived Class 前言 衍生類別的定義 單一繼承 public, protected, 和 privated 基底類別
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
第3章 C 語言的基本知識.
第11章 运算符重载 什么是运算符重载 运算符重载的方法 几个特殊的运算符的重载 自定义类型转换运算符 运算符重载实例.
第七章 搜索结构 静态搜索结构 二叉搜索树 AVL树.
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
第六章 继承性和派生类 胡昊 南京大学计算机系软件所.
西安交通大学 计算机教学实验中心 大学C++程序设计教程 西安交通大学 计算机教学实验中心
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
程序设计期末复习 黎金宁
第三章 C++中的C 面向对象程序设计(C++).
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
第八章 类与对象 本章要求: 掌握类的含义与定义格式。 掌握类的无参构造函数、带参构造函数、拷贝构造函数和赋值重载函数的定义格式及作用。
Object-Oriented Programming: Polymorphism
第六章 数据抽象-类 胡昊 南京大学计算机系软件所.
类类型 C++支持的内置类型和操作,如 int i=10; i=i%6; i=i+4;
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
C/C++/Java 哪些值不是头等程序对象
第三章 链表 单链表 (Singly Linked List) 循环链表 (Circular List) 多项式及其相加
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
程式結構&語法.
C#程序设计基础 $3 成员、变量和常量.
第16章 数据的共享和流通 一、浅拷贝和深拷贝 二、只读成员函数 三、友元friend.
第10讲 构造函数和析构函数 构造函数 析构函数 This 指针.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
字符串 (String) 字符串是 n (  0 ) 个字符的有限序列, 记作 S = “c1c2c3…cn” 其中,S 是串名字
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
C++大学基础教程 第10章 运算符重载 北京科技大学 2019/5/7 北京科技大学.
第二章 Java语法基础.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++程序设计 吉林大学计算机科学与技术(软件)学院.
C++程序设计基础 主讲人:谢昕 华东交通大学信息工程学院 第十~十二讲 多态性和虚函数 2005年春季学期.
Review 1~3.
第九章 物件導向-進階.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第1章 C++面向对象程序设计要点 1.1 函数和函数参数 1.2 输入输出   1.3 类 1.4 抽象类型和模板.
第 9 章 建構函式與解構函式.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
谭浩强编著 C++面向对象程序设计 授课教师:姬广永 学习网站:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第2章 Java语言基础.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++程序语言设计 Chapter 14: Templates.
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
Presentation transcript:

第七章 操作符重载 胡昊 南京大学计算机系软件所

重要内容

操作符重载-Complex(1) class Complex { double real, imag; public: Complex() {real=0; imag=0;} Complex(double r, double i) {real=r; imag=i;} Complex add(const Complex &x) const Complex temp; temp.real=real+x.real; temp.imag=imag+x.imag; return temp; } };

操作符重载-Complex(2) class Complex { double real, imag; public: Complex() {real=0; imag=0;} Complex(double r, double i) {real=r; imag=i;} Complex operator+(const Complex &x) const Complex temp; temp.real=real+x.real; temp.imag=imag+x.imag; return temp; } };

操作符重载-Complex(3) class Complex { double real, imag; public: Complex() {real=0; imag=0;} Complex(double r, double i) {real=r; imag=i;} friend Complex operator+(const Complex &c1, const Complex &c2); }; Complex operator+(const Complex &c1, const Complex &c2) Complex temp; temp.real=c1.real+c2.real; temp.imag=c1.imag+c2.imag; return temp; }

单目操作符重载++前置后置 class Counter { int value; public: Counter() {value=0;} Counter& operator ++() //前置++ value++; return *this; } const Counter operator++(int) //后置++ Counter temp=*this; ++(*this); //调用前置的++重载函数 return temp; };

必须用全局函数来实现 class Complex { double real, imag; public: Complex() {real=0; imag=0;} Complex(double r, double i) {real=r; imag=i;} friend Complex operator+(double d, const Complex &c); }; Complex operator+(double d, const Complex &c) return Complex(d+c.real, c.imag); } 不能用成员函数来实现,因为第一个参数的类型是double,而成员函数的第一个参数规定为Complex *const this

赋值操作符= String& String::operator=(const String& st) { if(&st == this) return *this; //防止自身赋值 delete []str; str=new char[strlen(st.str)+1]; strcpy(str, st.str); return *this; } class String { char *str; public: String() {str=NULL;} String(const char *p) str=new char[strlen(p)+1]; strcpy(str,p); } ~String() delete [] str; str=NULL; String& operator=(const String& st); };

下标操作符[] ...... class String { char *str; public: char& operator [](int i) //操作符[]的重载函数 if(i>=strlen(str) || i<0) cerr<<“下标越界错误\n”; exit(-1); } return str[i]; };

函数绑定 class A { int x, y; public: virtual void f(); }; class B: public A int z; void f(); void g(); func1(A &a) …… a.f(); //调用A::f还是B::f } func2(A *pa) { …… pa->f(); //调用A::f还是B::f } A a; func1(a); func2(&a); B b; func1(b); func2(&b);

虚函数动态绑定 class A { public: A() {f();} ~A() {……} virtual void f(); void g(); void h() {f(); g();} }; class B: public A ~B() {……}; void f(); A a; a.f(); a.g(); a.h(); B b(); b.f(); b.g(); b.h(); A *p; p=&a; p->f(); p->g(); p->h(); p=new B; delete p;

例1. 从键盘输入一组图形数据,然后画出相应的图形。其中的图形可以是:线段、矩形和圆。 Figure Rectangle Circle Line

virtual void draw() const=0; virtual void input_data()=0; }; class Figure{ public: virtual void draw() const=0; virtual void input_data()=0; }; class Rectangle: public Figure { double left,top,right,bottom; public: void draw() const { ...... /*画矩形*/ } void input_data() { cout << "请输入矩形的坐标:"; cin >> left >> top >> right >> bottom; } double area() const{ … } };

class Circle: public Figure { double x, y, r; public: void draw() const{ ...... /*画圆*/ } void input_data() { cout << "请输入圆的圆心坐标和半径 :"; cin >> x >> y >> r; } double area() const{ … }; };

class FigureGroup { //图形对象管理类 Figure *figures_buf[MAX_NUM]; int num_of_figures; public: FigureGroup() { num_of_figures = 0; } void display_figures() { for (int i=0; i<num_of_figures; i++) figures_buf[i]->draw(); } void input_figures_data() ; };

void FigureGroup::input_figures_data() { for (num_of_figures=0; num_of_figures<MAX_NUM; num_of_figures++ ) { int shape; do{ cout << “请输入图形的种类(0:线段,1: 矩形,2:圆,-1:结束):"; cin >> shape; } while (shape < -1 || shape > 2); if (shape == -1) break; switch (shape) { case 0: // 线 figures_buf[num_of_figures] = new Line; break; …… } figures_buf[num_of_figures]->input_data(); } }

int main() { FigureGroup figures; //输入图形数据 figures.input_figures_data(); //输出所有图形 figures.display_figures(); return 0; }