C++第四天

  1. 定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算符、逻辑运算符、自增自减运算符、插入/提取运算符)
    //主程序
    #include"stuper.h"
    int main()
    {cout<<boolalpha<<endl;string name="lisi";//Person p;Person p1(23,18,name);//自动调用有参构造p1.show();Person p2=p1;//自动调用拷贝构造函数p2.show();Person p3(p2);//自动调用拷贝构造函数p3.show();Person q1(10,20,name);Person q2(6,15,name);Person q3=q1+q2;q3.show1();//插入<<运算符重载cout<<"p1:"<<p1<<endl;if(q1>q2){cout<<"q1>q2"<<endl;}q1=q2++;q2.show();q1.show();Person p5;cin>>p5;cout<<"p5:"<<p5<<endl;cout<<"============================================"<<endl;Stu s1;//自动调用无参构造Stu s2(88);//自动调用有参构造s2.show();Stu s3=s2;//自动调用拷贝构造函数s3.show();Stu s4(s3);//自动调用拷贝构造函数s4.show();s1=s2;s1.show();return 0;
    }
    //头文件
    #ifndef STUPER_H
    #define STUPER_H
    #include <iostream>
    using namespace std;
    class Person;
    const Person operator++(Person &O,int);
    ostream &operator<<(ostream &cout, const Person &p);
    istream &operator>>(istream &cin, Person &p);class Person
    {friend istream &operator>>(istream &cin, Person &p);friend const Person operator++(Person &O,int);friend ostream &operator<<(ostream &cout, const Person &p);
    private:int age;int age1;string n="df";string &name=n;
    public://无参构造Person(){cout<<"Person无参构造"<<endl;}//有参构造Person(int age,int age1,string &name):age(age),age1(age1),name(name){cout<<"Person有参构造"<<endl;}//析构函数~Person(){cout << "Person::析构函数" << endl;}//拷贝构造函数Person(const Person &other):age(other.age),age1(other.age1),name(other.name){cout << "Person::拷贝构造函数" << endl;}//拷贝赋值函数Person &operator=(const Person &other){if(this != &other) //避免自己赋值给自己{age = other.age; //深拷贝age1=other.age1;name=other.name;}cout << "拷贝赋值函数" << endl;return *this;}//输出void show(){cout<<"age="<<age<<"  age1="<<age1<<"    name="<<name<<endl;}void show1(){cout<<"age="<<age<<"  age1="<<age1<<endl;}//Person的运算符重载//算术运算符//成员函数实现+号运算符重载const Person operator+(const Person &R) const{Person temp;temp.age = this->age + R.age;temp.age1= this->age1 + R.age1;return temp;}
    //局部函数实现>号运算符重载bool operator>( const Person &R)const{if(age > R.age  && age1 > R.age1){return true;}else{return false;}}};
    //==========================================class Stu
    {
    private:double *score;
    public://无参构造Stu(){cout<<"Stu无参构造"<<endl;}//有参构造Stu(double score):score(new double(score)){cout<<"Stu有参构造"<<endl;}//析构函数~Stu(){cout << "Stu::析构函数" << endl;delete score;}//拷贝构造函数Stu(const Stu &other):score(new double(*(other.score))){cout << "Stu::拷贝构造函数" << endl;}//拷贝赋值函数Stu &operator=(const Stu &other){if(this != &other) //避免自己赋值给自己{score = new double(*(other.score)); //深拷贝}cout << "拷贝赋值函数" << endl;return *this;}void show(){cout<<"score="<<*score<<endl;}
    };
    #endif // STUPER_H
    
    //函数体
    #include "stuper.h"//全局函数实现前置++运算符重载const Person operator++(Person &O,int){Person temp;temp.age=O.age++;temp.age1=O.age1++;return temp;}//全局函数实现插入<<运算符重载ostream &operator<<(ostream &cout, const Person &p){cout << "age = " << p.age << " age1 = " << p.age1<<"name = "<<p.name;return cout;}//全局函数实现提取>>运算符重载istream &operator>>(istream &cin, Person &p){cin >> p.age >> p.age1>>p.name;return cin;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/321230.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法训练day02Leetcode977有序数组平方209长度最小的字数组59螺旋问题

今日学习的文章链接和视频链接 https://www.bilibili.com/video/BV1QB4y1D7ep/?vd_source8272bd48fee17396a4a1746c256ab0ae https://www.bilibili.com/video/BV1tZ4y1q7XE/?vd_source8272bd48fee17396a4a1746c256ab0ae https://programmercarl.com/0059.%E8%9E%BA%E6%97%…

HttpRunner自动化之响应中文乱码处理

响应中文乱码&#xff1a; 当调用接口&#xff0c;响应正文返回的中文是乱码时&#xff0c;一般是响应正文的编码格式不为 utf-8 导致&#xff0c;此时需要根据实际的编码格式处理 示例&#xff1a; 图1中 extract 提取title标题&#xff0c;output 输出 title 变量值&#x…

Proxy 与 defineProperty 的理解、区别、优势、劣势

一、Object.defineProperty() 文档&#xff1a;Object.defineProperty() - JavaScript | MDN 作用&#xff1a;对一个对象进行操作的方法。可以为一个对象增加一个属性&#xff0c;同时也可以对一个属性进行修改和删除。 它是在 ES5 中引入的&#xff0c;使用了 getter 和 s…

OV8856 帧同步功能说明分享

OV8856支持帧同步功能&#xff0c;用于同步两个传感器的输出时序。同步是通过配置OV8856的一个(从设备)FSIN作为输入引脚来接受另一个主传感器设备(也可能是另一个OV8856) VSYNC作为触发信号来实现的。 1.OV8856有专用的GPIO引脚(FSIN)用于帧同步功能。 该引脚可配置为接收外…

[计算机提升] Windows系统软件:管理类

3.6 系统软件&#xff1a;管理类 3.6.1 运行 通过运行程序&#xff0c;在打开输入框中输入名称&#xff0c;按下回车后可以打开相应的程序、文件夹、文档或Internet资源&#xff1a; 3.6.2 命令提示符&#xff1a;cmd 在Windows系统中&#xff0c;cmd是指"命令提示符…

Java 泛型深入解析

Java 中的泛型是一种强大的编程特性&#xff0c;允许我们编写更加通用和类型安全的代码。本篇博客将深入探讨 Java 泛型的各个方面&#xff0c;包括泛型类、泛型方法、泛型接口以及泛型通配符。 1. 泛型类 首先&#xff0c;让我们看一个简单的泛型类的例子。在下面的代码中&a…

SpringBoot全局Controller返回值格式统一处理

一、Controller返回值格式统一 1、WebResult类 在 Controller对外提供服务的时候&#xff0c;我们都需要统一返回值格式。一般定义一个 WebResult类。 统一返回值&#xff08;WebResult类&#xff09;格式如下&#xff1a; {"success": true,"code": 2…

【计算机算法设计与分析】n皇后问题(C++_回溯法)

文章目录 题目描述测试样例算法原理算法实现参考资料 题目描述 在nxn格的棋盘上放置彼此不受攻击的n格皇后。按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在nxn格的棋盘上放置n个皇后&#xff0c;任何2个皇后不放在同…

jmeter关联依赖---三种

1.正则表达式提取器 2.xpath取样器 3.json提取器

java练习题之String方法运用

应用知识点&#xff1a;​​​​​​String类 1&#xff1a;(String 类)仔细阅读以下代码段&#xff1a; String s "hello"; String t"hello"; char[] c {h,e,l,l,o}; 2&#xff1a;下列选项输出结果为false 的语句是() System.out.println( s.euqals( t…

鸿蒙4.0开发实战(ArkTS)-闹钟制作

闹钟功能要求 展示指针表盘或数字时间。添加、修改和删除闹钟。展示闹钟列表&#xff0c;并可打开和关闭单个闹钟。闹钟到设定的时间后弹出提醒。将闹钟的定时数据保存到轻量级数据库。 闹钟主界面 闹钟界面包括当前时间、闹钟列表、添加闹钟子组件&#xff0c;具体包括以下…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移&#xff1f; 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用&#xff0c;你需要避免常见的陷阱&#xff0c;这些陷阱可能会影响你的知名度&#xff0c;并导致流量和收入的损失。 8 月 11 日&#xff0c;我主持了一场赞助的搜索引擎杂志网…