当前位置: 首页 > news >正文

C++4d

#include <iostream>
#include <string>
using namespace std;

class Per
{
private:
string name;   // 姓名
int age;       // 年龄
double* height; // 身高(指针,需动态分配内存)
double* weight; // 体重(指针,需动态分配内存)
public:
// 1. 普通构造函数:初始化成员,为指针分配内存
Per(string n = "无名", int a = 0, double h = 0.0, double w = 0.0) : name(n), age(a)
{
height = new double(h); // 为身高分配内存并赋值
weight = new double(w); // 为体重分配内存并赋值
cout << "Per 普通构造函数调用" << endl;
}

    // 2. 析构函数:释放指针指向的动态内存,防止内存泄漏
~Per()
{
delete height; // 释放身高的内存
delete weight; // 释放体重的内存
cout << "Per 析构函数调用" << endl;
}

    // 3. 拷贝构造函数:深拷贝(为新对象的指针分配独立内存)
Per(const Per& other) : name(other.name), age(other.age)
{
height = new double(*(other.height)); // 为新身高分配内存,复制值
weight = new double(*(other.weight)); // 为新体重分配内存,复制值
cout << "Per 拷贝构造函数调用" << endl;
}

    // 4. 拷贝赋值函数:先释放当前内存,再深拷贝新内容(防止自赋值)
Per& operator=(const Per& other)
{
if (this != &other)
{ // 防止“自赋值”(如 p = p;)
name = other.name;
age = other.age;
// 先释放当前对象的旧内存
delete height;
delete weight;
// 深拷贝新对象的内容
height = new double(*(other.height));
weight = new double(*(other.weight));
}
cout << "Per 拷贝赋值函数调用" << endl;
return *this; // 返回自身引用,支持链式赋值(如 p1 = p2 = p3;)
}

    // 辅助:显示成员信息(便于测试)
void show() const
{
cout << "姓名:" << name << ",年龄:" << age<< ",身高:" << *height << ",体重:" << *weight << endl;
}
};
class Stu
{
private:
double score; // 成绩
Per p1;       // Per类的对象成员(会自动调用Per的构造/拷贝/析构)
public:
// 1. 普通构造函数:初始化成绩,并用Per对象初始化p1
Stu(double s = 0.0, const Per& p = Per()) : score(s), p1(p)
{
cout << "Stu 普通构造函数调用" << endl;
}

    // 2. 析构函数:p1是Per对象,会自动调用Per的析构,无需手动处理
~Stu()
{
cout << "Stu 析构函数调用" << endl;
}

    // 3. 拷贝构造函数:复制成绩,并调用Per的拷贝构造初始化p1
Stu(const Stu& other) : score(other.score), p1(other.p1)
{
cout << "Stu 拷贝构造函数调用" << endl;
}

    // 4. 拷贝赋值函数:复制成绩,并调用Per的拷贝赋值给p1(防止自赋值)
Stu& operator=(const Stu& other)
{
if (this != &other)
{ // 防止“自赋值”
score = other.score;
p1 = other.p1; // 调用Per的拷贝赋值函数
}
cout << "Stu 拷贝赋值函数调用" << endl;
return *this;
}

    // 辅助:显示成员信息(便于测试)
void show() const
{
cout << "成绩:" << score << endl;
p1.show(); // 调用Per的show方法
}
};
int main()
{
// 测试 Per 类
Per p("张三", 20, 175.5, 65.0);
p.show();

    Per p2 = p; // 调用 Per 拷贝构造
p2.show();

    Per p3("李四", 22, 180.0, 70.0);
p = p3; // 调用 Per 拷贝赋值
p.show();

    cout << "----------------" << endl;

    // 测试 Stu 类
Stu s(90.5, p);
s.show();

    Stu s2 = s; // 调用 Stu 拷贝构造
s2.show();

    Stu s3(85.0, p3);
s = s3; // 调用 Stu 拷贝赋值
s.show();

    return 0;
}

http://www.dtcms.com/a/424791.html

相关文章:

  • Reranker模型从Reddit帖子爬取发现潜在客户需求
  • 购物网站 页面设计北京软件编程培训机构
  • Highcharts 树状图(Treemap)
  • LTspice —— 验证戴维南与诺顿定理
  • 网站服务器如何更改解析微信公众号网站导航怎么做
  • 如何学习 OpenTelemetry-Java-Agent(一):自定义 OTLP-HTTP-Collector 实现数据接收与格式化输出
  • 网站双语怎么做大学院系网站建设
  • 明星设计网站风格说明行政机关网站建设的意义
  • 云畅网站建设后台万网域名管理平台登录
  • 深度剖析档案宝:如何重塑档案收集、存储与利用流程?
  • php一个空间放多个网站浏览量代码wordpress
  • Python字符串格式化:从%操作符到f-string的完全指南
  • html网站开发实验报告网站建设设计 飞沐
  • 国产服务器品牌前十大排名怎么做网站的seo排名知乎
  • 没事网站建设项目规划书网站嵌入英文地图
  • Python实现网址管理小工具
  • 潮汕17网站一起做网店官网北京快三平台
  • 专门做杂志的网站有哪些做网站单网页
  • wordpress 文章转dz企业站seo点击软件
  • 一流的聊城做网站费用百度高级搜索引擎入口
  • 李想公开课_如何做一个专业的CEO笔记
  • 房地产型网站建设报价pageadmin系统
  • group scheduling
  • 工业园区门户网站建设方案网站建设极地网
  • 网站建设网站系统选择做宣传册参考的网站
  • 自治区建设厅网站哪些网站做的比较好的
  • jsp网站开发技术难点建设永久网站
  • 做教育的网站有哪些中国怎么进fiverr网站做任务
  • 门户网站制作企业wordpress怎么做表格
  • 从索引失效到毫秒级响应——SQL 优化实战案例:从慢查询到高性能的完整指南之电商大促篇