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

一、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.hqwc.cn/news/81123.html

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

相关文章

第3篇:vscode搭建esp32 arduino开发环境

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 1.下载vscode并安装 https://code.visualstudio.com/ 运行VSCodeUserSetup-x64-1.80.1.exe 2.点击扩展&#xff0c;搜索arduino,并点击安装 3.点击扩展设置&#xff0c;配置arduino…

Elasticsearch 处理地理信息

1、GeoHash ​ GeoHash是一种地理坐标编码系统&#xff0c;可以将地理位置按照一定的规则转换为字符串&#xff0c;以方便对地理位置信息建立空间索引。首先要明确的是&#xff0c;GeoHash代表的不是一个点而是一个区域。GeoHash具有两个显著的特点&#xff1a;一是通过改变 G…

无涯教程-PHP - 常量数组

现在可以使用 define()函数定义数组常量。在PHP 5.6中&#xff0c;只能使用 const 关键字定义它们。 <?php//define a array using define functiondefine(animals, [dog,cat,bird]);print(animals[1]); ?> 它产生以下浏览器输出- cat PHP - 常量数组 - 无涯教程网无…

存储过程的使用

一、实验目的 熟练掌握使用 SQL SERVER 2000 创建和执行存储过程的方法。 熟练掌握存储过程的删除操作。 二、实验准备 1&#xff0e;熟悉 SQL SERVER 2000 设计环境&#xff1b; 2&#xff0e;熟悉存过过程的创建方法、步骤 三、实验内容 1、利用企业管理器或查询分析器…

YoloV5环境搭建记录

https://github.com/ultralytics/yolov5/ 1、在Anaconda Promptx新建conda虚拟环境 conda create -n py39_yolov5 python3.9 2、激活虚拟环境 conda activate py39_yolov5 3、虚拟环境下装所需依赖 conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cpuo…

C++11特性详解

一、简介 在C11标准出来之前&#xff0c;一直是C98/03标准占引领地位&#xff0c;而C98/03标准是C98标准在2003年将存在的一些漏洞进行了修复&#xff0c;但并没有核心语法的改动。相比于C98/03&#xff0c;C11则带来了数量可观的变化&#xff0c;其中包含了约140个新特性&…

Android5:活动生命周期

创建项目Stopwatch activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_w…

pycharm添加虚拟环境以及虚拟环境安装pytorch

file、settings、interpreter、add interpreter、add local interpreter 记住不要勾选inherit&#xff0c;不然会把主环境的东西继承到虚拟环境。 创建前可以先点existing看看有没有已经建好的虚拟环境 有的时候pycharm有问题&#xff0c;创建了虚拟环境没有显示。找一个.py文…

Nginx前后端服务器部署

Nginx作为正反向代理的中转站&#xff0c;是连接前后端网络服务的媒介 Nginx下载&#xff1a;http://nginx.org/download/http://nginx.org/download/ 一、上传到服务器固定路径下并解压 上传到/opt/software/nginx-1.19.0.tar.gz cd /opt/software/ tar -zxvf nginx-1.19.0.…

Linux系统安装(虚拟机安装;系统分区;Linux系统安装;远程登录管理工具)

文章目录 1. VMware虚拟机安装与使用2. 系统分区2.1 磁盘分区2.2 格式化2.3 硬件设备文件名2.4 分区设备文件名2.5 挂载2.6 文件系统结构2.7 总结 3. Linux系统安装4. 远程登录管理工具 1. VMware虚拟机安装与使用 VMware是一个虚拟PC的软件&#xff0c;可以在现有的操作系统上…

网络面试题(172.22.141.231/26,该IP位于哪个网段? 该网段拥有多少可用IP地址?广播地址是多少?)

此题面试中常被问到&#xff0c;一定要会172.22.141.231/26&#xff0c;该IP位于哪个网段&#xff1f; 该网段拥有多少可用IP地址&#xff1f;广播地址是多少&#xff1f; 解题思路&#xff1a; 网络地址&#xff1a;172.22.141.192 10101100.00010110.10001101.11000000 广播…

countDown+react+hook

道阻且长&#xff0c;行而不辍&#xff0c;未来可期 知识点一&#xff1a; new Date().getTime()可以得到得到1970年01月1日0点零分以来的毫秒数。单位是毫秒 new Date().getTime()/1000获取秒数1分钟60秒&#xff0c;1小时60分钟1hour:60*60>单位是秒 60*60*1000>单位…