C++程序设计_第9章_运算符重载及流类库

例9.1

完整实现str类的例子。

 1 #define _CRT_SECURE_NO_WARNINGS
 2
 3 #include <iostream>
 4 #include <string>
 5
 6 using namespace std;
 7
 8 class str
 9 {
10 private:
11     char *st;
12 public:
13     str(char *s);//使用字符指针的构造函数
14     str(str& s);//使用对象引用的构造函数
15     str& operator=(str& a);//重载使用对象引用的赋值运算符
16     str& operator=(char *s);//重载使用指针的赋值运算符
17     void print()
18     {
19         cout << st << endl;//输出字符串
20     }
21     ~str()
22     {
23         delete st;
24     }
25 };
26
27 str::str(char *s)
28 {
29     st = new char[strlen(s) + 1];//为st申请内存
30     strcpy(st, s);//将字符串s复制到内存区st
31 }
32
33 str::str(str& a)
34 {
35     st = new char[strlen(a.st) + 1];//为st申请内存
36     strcpy(st, a.st);//将对象a的字符串复制到内存区st
37 }
38
39 str& str::operator=(str& a)
40 {
41     if (this == &a)//防止a=a这样的赋值
42     {
43         return *this;//a=a,退出
44     }
45     delete st;//不是自身,先释放内存空间
46     st = new char[strlen(a.st) + 1];//重新申请内测
47     strcpy(st, a.st);//将对象a的字符串复制到申请的内存区
48     return *this;//返回this指针指向的对象
49 }
50
51 str& str::operator=(char *s)
52 {
53     delete st;//是字符串直接赋值,先释放内存空间
54     st = new char[strlen(s) + 1];//重新申请内存
55     strcpy(st, s);//将字符串s复制到内存区st
56     return *this;
57 }
58
59 void main()
60 {
61     str s1("We"), s2("They"), s3(s1);//调用构造函数和复制构造函数
62
63     s1.print();
64     s2.print();
65     s3.print();
66
67     s2 = s1 = s3;//调用赋值操作符
68     s3 = "Go home!";//调用字符串赋值操作符
69     s3 = s3;//调用赋值操作符但不进行赋值操作
70
71     s1.print();
72     s2.print();
73     s3.print();
74
75     system("pause");
76 };

例9.2

123

时间: 2024-10-25 07:51:36

C++程序设计_第9章_运算符重载及流类库的相关文章

ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 GIS的六大功能是数据获取.存储.查询.分析.表达.输出.在前面的内容里已经介绍了使用ArcGIS进行数据获取.存储.查询.表达和输出的过程,本章将介绍如何在ArcGIS中进行地理分析.分析是GIS的核心和灵魂,是GIS区别于一般的信息系统.CAD或者电子地图系统的主要标志之一. GIS分析,就是研究

ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Desktop的组成部分之一,ArcMap用于数据的浏览.编辑.显示.查询.地图排版等.ArcMap和ArcCatalog一起构成了完整的数据处理与管理分析的功能.在前一章中已经介绍了ArcCatalog的使用,本章中将介绍ArcMap的使用.本章的例子依然使用第4章里的小区平面图示例,但是将从原理的角度做更加

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

sdut 面向对象程序设计上机练习十二(运算符重载)

面向对象程序设计上机练习十二(运算符重载) Time Limit: 1000MS Memory limit: 65536K 题目描述 处理一个复数与一个double数相加的运算,结果存放在一个double型变量d1中,输出d1的值.定义Complex(复数)类,在成员函数中包含重载类型转换运算符:operator double(){return real;} 输入 输入占两行: 第1行是一个复数的实部和虚部,数据以空格分开. 第2行是一个实数. 输出 输出占一行,复数的实部和实数之和,小数点后保

c++第九章-(运算符重载)

一些规则 1.c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载. 2.除了五个运算符不允许重载外,其他运算符允许重载: .成员访问运算符 *成员指针访问运算符 ::与运算符 sizeof尺寸运算符 ?:条件运算符 3.重载运算符必须和用户定义的自定义类型的对象一起使用.(也就是说,参数不能全部都是c++的标准类型,这样约定是为了防止用户修改用于标准类型结构的运算符性质) 4.为什么运算符重载函数有两个参数,只需有一个参数? 其实是有一个参数是隐含着的,运算符函数是用this指

《Pyhton语言程序设计》_第7章_对象和类

#7.2.1_定义类 一个类的功能:数据域.定义方法.初始化程序 初始化程序总是被命名为:_ _init_ _ (两个连续的下划线) #7.2.4_self参数 #self参数是指向对象本身的参数,那么它的作用域就是整个类,self.x可以直接访问实例变量x,self.ml()表示调用类的对象self的示例方法ml. #7.2.5_举例:使用类 原文地址:https://www.cnblogs.com/qiyuanjiejie/p/9736766.html

java基础_第02章:运算符

掌握Java中标识符的定义: 掌握Java中数据类型的划分以及基本数据类型的使用原则: 掌握Java运算符的使用: 掌握Java分支结构.循环结构.循环控制语法的使用: 掌握方法的定义结构以及方法重载的概念应用. Java中的注释 // 注释:单行注释: /* ... */':多行注释: /** ... */:文档注释. Java中的关键字 Java基本数据类型的大小.范围.默认值 No. 数据类型 大小/位 可表示的数据范围 默认值 1 byte(字节) 8 -128 ~ 127 0 2 sh

04747_Java语言程序设计(一)_第6章_图形界面设计(二)

例6.1声明一个面板子类,面板子类对象有3个选择框. class Panel1 extends JPanel { JCheckBox box1,box2,box3; Panel1() { box1=new JCheckBox("足球");box2=new JCheckBox("排球"); box3=new JCheckBox("篮球");add(box1);add(box2);add(box3); } } 51551

04747_Java语言程序设计(一)_第4章_数组和字符串

例4.1小应用程序先声明一个数组a,在方法init()中创建它,指定有5个元素,然后为数组元素逐一赋值.在方法paint()中输出数组各元素的值. import java.applet.*;import java.awt.*; public class Example4_1 extends Applet { int a[];//标识符ua能引用元素类型是int的数组 public void init() { a=new int[5];//创建一个含5个元素的数组,并让a引用它 a[0]=100;