C++day4(拷贝赋值函数、匿名对象、友元、常成员函数和常对象、运算符重载)

news2024/11/18 12:45:04

一、Xmind整理:

二、上课笔记整理:

1.day3作业订正:设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高...

#include <iostream>

using namespace std;

//封装人 类
class Person
{
private:
    string name;
    int age;
    double *h; //身高
public:
    //无参构造函数
    Person() { cout << "Person::无参构造函数" << endl;}

    //有参构造
    Person(string name, int age , double h):name(name),age(age),h(new double(h))
                                                                //h = new double(h)
    {cout << "Person::有参构造函数" << endl;}

    //拷贝构造函数
    Person(const Person& p):name(p.name),age(p.age),h(new double(*(p.h)))
    {cout << "Person::拷贝构造函数" << endl; }

    ~Person()
    {
        cout << "Person::析构函数"  << endl;
        delete h;
    }

};

//封装学生 类
class Stu
{
private:
    int math;
    Person p;
public:
    //
    Stu() {cout << "Stu::无参构造" << endl;}

    //
    Stu(string name, int age, double h, int math):math(math),p(name,age,h)
    {cout << "Stu::有参构造" << endl;}
    //拷贝构造函数
    Stu(const Stu& s):math(s.math),p(s.p)
    {
        cout << "Stu::拷贝构造函数" << endl;
    }

    ~Stu()
    {
        cout << "Stu::析构函数"  << endl;
    }

};

int main()
{
    Stu s; //
    Stu s1("张三",34,189,67); //
    Stu s2 = s1;  //

    return 0;
}

 2.封装学生的类,写出构造函数,析构函数、拷贝构造函数、拷贝赋值函数

#include <iostream>

using namespace std;
class Stu
{
private:
    string name;
    int age;
public:
    Stu()
    {
        cout << "无参构造函数" << endl;
    }
    Stu(string name,int age):name(name),age(age)
    {
        cout << "有参构造函数" << endl;
    }
    Stu(const Stu &other):name(other.name),age(other.age)
    {
        cout << "拷贝构造函数" << endl;
    }
    Stu &operator=(const Stu &other)
    {
        if(this != &other)
        {
            name = other.name;
            age = other.age;
            cout << "拷贝赋值函数" << endl;
        }
        return *this;
    }
    ~Stu()
    {
        cout << "析构函数"  << endl;
    }
    void display()
    {
        cout << name << endl;
        cout << age << endl;
    }
};

int main()
{
    Stu s1 ("zhangsan",20);
    s1.display();

    Stu s2 =s1;
    s2.display();

    Stu s3;
    s3 = s2;
    s3.display();
    return 0;
}

3.匿名对象

#include <iostream>

using namespace std;
class Stu
{
private:
    string name;
    int age;
public:
    Stu()
    {
        cout << "无参构造函数" <<endl;
    }
    Stu(string name,int age):name(name),age(age)
    {
        cout << "有参构造函数" << endl;
    }
    void show()
    {
        cout << name << endl;
        cout << age << endl;
    }

};
void fun(Stu s)
{
    s.show();
}

int main()
{
    Stu s1 = Stu("zhangsan",12);
    s1.show();

    Stu s[3] = {Stu("a",1),Stu("b",2),Stu("c",3)};
    s[0].show();
    s[1].show();
    s[2].show();

    fun(Stu("lisi",5));

    return 0;
}

4.全局函数、类做友元

#include <iostream>

using namespace std;
class Room
{
    friend void goodgay(Room &r);
    friend class GoodGay;
private:
    string mybedroom;
public:
    string livingroom;
public:
    Room()
    {
        mybedroom = "卧室";
        livingroom = "客厅";
    }
};

//类做友元
class GoodGay
{
public:
    Room *r;
    void visit()
    {

        cout << "好基友类正在访问" << r->mybedroom <<endl;
        cout << "好基友类正在访问" << r->livingroom <<endl;
    }
public:
    GoodGay()
    {
        r = new Room;
    }
};

//全局函数做友元
void goodgay(Room &r)
{
    cout << "好基友函数正在访问" << r.mybedroom <<endl;
    cout << "好基友函数正在访问" << r.livingroom <<endl;
}

int main()
{
    Room r;
    goodgay(r);

    GoodGay g;
    g.visit();
    return 0;
}

5.成员函数做友元

#include <iostream>

using namespace std;

class Room;//声明有这样的类

//类做友元
class GoodGay
{
public:
    Room *r;
    void visit();//在类内声明
    GoodGay();
};

//封装 房间 类
class Room
{
    friend void GoodGay::visit();  //这个类的成员函数是本类的好朋友。可以访问本类所有成员
private:
    string m_BedRoom;  //卧室
public:
    string m_SittingRoom; //客厅
public:
    //无参
    Room()
    {
        m_BedRoom = "卧室";
        m_SittingRoom = "客厅";
    }
};

void GoodGay::visit()  //在类外定义成员函数
{
     cout << "好基友类正在访问。。" << r->m_SittingRoom << endl;
     cout << "好基友类正在访问。。"  << r->m_BedRoom << endl;
}
GoodGay::GoodGay()
{
    r = new Room;
}

int main()
{
    GoodGay g;
    g.visit();

    return 0;
}

6.常成员函数

#include <iostream>

using namespace std;

class Stu
{
private:
    string name;
    int age;
public:
    //无参构造函数
    Stu()
    {

    }
    //有参构造函数
    Stu(string name, int age):name(name),age(age)
    {

    }
    //常成员函数
    void show()const
    {
        cout << "姓名:" << name << endl;
        cout << "年龄:" << age << endl;
    }
};

int main()
{
    Stu s1("zhangsan",10);
    s1.show();

    return 0;
}

 7.常对象+mutable关键字

#include <iostream>

using namespace std;

class Stu
{
private:
    string name;
    mutable int age;
public:
    //无参构造函数
    Stu()
    {

    }
    //有参构造函数
    Stu(string name, int age):name(name),age(age)
    {

    }
    //常成员函数
    void show()const
    {
        age = 19;
        cout << "姓名:" << name << endl;
        cout << "年龄:" << age << endl;
    }
    //非常成员函数
    void show()
    {
        age = 16;
        cout << "姓名:" << name << endl;
        cout << "年龄:" << age << endl;
    }
};

int main()
{
    //非常对象
    Stu s1("zhangsan",10);
    s1.show();

    //常对象
    const Stu s2("lisi",15);
    s2.show();

    return 0;
}

8.实现+号运算符重载(成员函数、全局函数)

#include <iostream>

using namespace std;

class Person
{
   // friend const Person operator+(const Person &L, const Person &R);
private:
    int a;
    int b;
public:
    //无参构造函数
    Person()
    {

    }
    //有参构造函数
    Person(int a, int b):a(a),b(b)
    {

    }
    //成员函数实现 + 号运算符重载
    const Person operator+(const Person &R)const
    {
        Person temp;
        temp.a = a + R.a;
        temp.b = b + R.b;
        return temp;
    }
    void show()
    {
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
    }
};

//全局函数实现 + 号运算符重载
//const Person operator+(const Person &L, const Person &R)
//{
//    Person temp;
//    temp.a = L.a + R.a;
//    temp.b = L.b + R.b;
//    return temp;
//}

int main()
{
    Person p1(10,10);
    Person p2(10,10);
    Person p3 = p1 + p2;
    p3.show();

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop Yarn 配置多队列的容量调度器

文章目录 配置多队列的容量调度器多队列查看 配置多队列的容量调度器 首先&#xff0c;我们进入 Hadoop 的配置文件目录中&#xff08;$HADOOP_HOME/etc/hadoop&#xff09;&#xff1b; 然后通过编辑容量调度器配置文件 capacity-scheduler.xml 来配置多队列的形式。 默认只…

Enable Secure boot on software

User Guide&#xff1a; Secure Boot V1Secure Boot V2espsecure.py Please follow these steps: 1、Query the chip version esptool.py chip_idThe V1.0 version chip only supports Secure boot V1 The V3.0 or later version chip support Secure boot V2 2、You need…

Spring redis使用报错Read timed out排查解决

文章目录 使用场景报错信息解决方式 使用场景 我们使用redis作为缓存服务&#xff0c;缓存一些业务数据&#xff0c;如路口点位信息、渠化信息、设备信息等有一些需要实时计算的数据&#xff0c;缓存在redis里&#xff0c;如实时信号周期相位、周期内过车数量等有需要不同服务…

【CesiumJS入门】(9)获取地表两点的距离及中心点——EllipsoidGeodesic

前言 一般情况下&#xff0c;我们可以直接通过Cesium.Cartesian3.distance(left, right)来获取两点的距离&#xff0c;但获取到的是两点的直线距离&#xff1a; const start new Cesium.Cartesian3.fromDegrees(113,23); const end new Cesium.Cartesian3.fromDegrees(113,…

食品安全”有救了“!温湿度监控快速见效!

在储存、运输和加工过程中&#xff0c;适当的温湿度条件对于保持食品的新鲜度、延长货物寿命以及防止食品交叉污染至关重要。通过精确的温湿度监测和实时数据分析&#xff0c;食品行业能够降低损失、提高产品质量&#xff0c;并满足监管要求。 在这个竞争激烈的行业中&#xff…

大数据精准营销获客能为企业带来哪些东西?

广告圈里一句名言:我知道我的广告浪费了一半&#xff0c;但我不知道浪费了哪一半。当前&#xff0c;越来越多的企业在大数据思维指导下进行广告投放&#xff0c;广告能通过对人群的定向&#xff0c;投放给准确的目标顾客&#xff0c;特别是互联网广告现在能够做到根据不同的人向…

【SpringBoot】第一篇:redis使用

背景&#xff1a; 本文是教初学者如何正确使用和接入redis。 一、引入依赖 <!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><depen…

为什么项目经理离不开甘特图?究竟好在哪?

项目经理在管理项目过程中&#xff0c;需要面对众多的任务和时间安排&#xff0c;如何高效地完成项目目标成为了一个重要的课题。在这个时候&#xff0c;甘特图作为一种重要的工具&#xff0c;成为了项目经理的得力助手。 甘特图是一种以时间为轴的图形化工具&#xff0c;通过横…

数据分析案例-汽车客户信息数据可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

基于模糊神经网络的嘉陵江水质评价Matlab代码

1.案例背景 1.1 模糊数学简介 模糊数学是用来描述、研究和处理事物所具有的模糊特征的数学&#xff0c;“模糊”是指它的研究对象,而“数学”是指它的研究方法。 模糊数学中最基本的概念是隶属度和模糊隶属度函数。其中,隶属度是指元素u属于模糊子集f的隶属程度,用uf(…

最简单 实现 Element-ui el-table的懒加载表格数据 el-table懒加载请求数据 element-ui 懒加载

最简单 实现 Element-ui el-table的懒加载表格数据 el-table懒加载请求数据 element-ui 懒加载 1、效果图2、代码 1、效果图 2、代码 <template> <el-table :data"tableData" style"width: 100%" expand-change"expandChange"><…

matlab使用教程(24)—常微分方程(ODE)求解器

1.常微分方程 常微分方程 (ODE) 包含与一个自变量 t&#xff08;通常称为时间&#xff09;相关的因变量 y 的一个或多个导数。此处用于表示 y 关于 t 的导数的表示法对于一阶导数为 y ′ &#xff0c;对于二阶导数为 y ′′&#xff0c;依此类推。ODE 的阶数等于 y 在方程中…

python爬虫实战零基础(3)——某云音乐

爬取某些云网页音乐&#xff0c;无需app 分析网页第二种方式批量爬取 声明&#xff1a;仅供参考学习&#xff0c;参考&#xff0c;若有不足&#xff0c;欢迎指正 你是不是遇到过这种情况&#xff0c;在pc端上音乐无法下载&#xff0c;必须下载客户端才能下载&#xff1f; 那么&…

采集项目和数仓项目的关系

1.介绍 采集项目和数仓项目 采集和数仓是企业数据管理平台的2个核心功能模块,相对独立,所以可以独立开发 区别 功能 采集:数据的采集和传输 数仓:数据的存储 流程 数据库->数据采集->数据仓库->可视化界面 2.数据仓库 什么是数仓? 1.名称 数据库 : database…

杰克逊霍尔央行年会倒计时!鲍威尔压轴登场,美股能否重现“厄运九分钟”?

“央行行长的达沃斯论坛”——杰克逊霍尔央行年会将于美国当地时间本周四至周六举行&#xff0c;主题为“全球经济的结构性变化”&#xff0c;来自全球主要的央行行长、财政官员、经济学家、知名学者、财经媒体等齐聚一堂&#xff0c;共商经济前景和货币政策。 对于这些主要货币…

shopee马来西亚站市场情况如何?卖家怎么选品?

一、shopee马来西亚市场 马来西亚是东南亚的中心地带&#xff0c;拥有3,278万人口&#xff0c;其中30岁以下的年轻人占总人口的49%。马来西亚的经济发展较好&#xff0c;在电商市场方面具备良好的发展潜力。在热销品类方面&#xff0c;母婴用品、时尚服饰、美妆保健品和家居用…

数据库-表连接的几种方式

文章目录 1. 数据库表连接方式简介2. 内连接&#xff08;INNER JOIN&#xff09;3. 左外连接&#xff08;LEFT JOIN&#xff09;4. 右外连接&#xff08;RIGHT JOIN&#xff09;5. 全连接&#xff08;FULL OUTER JOIN&#xff09;6. 交叉连接&#xff08;CROSS JOIN&#xff09…

vue组件的使用

一、首先要穿件组件构造器对象&#xff0c;或者导入组件 1..在本部分注册组件其中组件为子组件 2.在本部分注册组件 二、而后注册组件 1.在本部分注册组件其中组件为子组件 2.在本部分注册组件 三、 接着&#xff0c;使用组件。 1.在本部分注册组件其中组件为子组件 其中v-i…

帮助中心应该用什么工具做?

在线帮助中心是指一个位于互联网上的资源平台&#xff0c;提供给用户获取产品或服务相关信息、解决问题以及获取技术支持的渠道。它通常包含了组织化的知识库、常见问题解答&#xff08;FAQ&#xff09;、操作指南、教程视频、用户手册等内容。在线帮助中心的主要目标是为用户提…

M1 Pro 利用docker 搭建pytho2的开发环境,以vscode连接开发为例

使用 M1 Pro &#xff08;不支持python2的安装&#xff09;开发&#xff0c;需要使用 Python 2.7 的环境&#xff0c;在使用 pyenv 安装 Python 2 时遇到了各种奇怪的问题。最终&#xff0c;我决定使用 Docker 搭建开发环境&#xff0c;并使用 VS Code 连接到本地容器。以下是详…