【C++ Primer Plus习题】12.1

2024-09-07 21:20
文章标签 c++ plus 习题 primer 12.1

本文主要是介绍【C++ Primer Plus习题】12.1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

问题:

这里是引用
在这里插入图片描述

解答:
main.cpp

#include <iostream>
#include "Cow.h"
using namespace std;int main()
{Cow c1;Cow c2("老母牛", "喝奶", 200);Cow c3(c2);c1 = c3;c1.ShowCow();cout << endl;c2.ShowCow();cout << endl;c3.ShowCow();cout << endl;return 0;
}

Cow.h

#pragma once
#include <iostream>
using namespace std;
class Cow
{char name[20];char* hobby;double weight;public:Cow();Cow(const char*nm,const char*ho,double wt);Cow(const Cow &c);~Cow();Cow& operator=(const Cow& c);void ShowCow()const;
};

Cow.cpp

#include "Cow.h"Cow::Cow()
{name[0] = '\0';hobby = NULL;weight = 0;
}
Cow::Cow(const char* nm, const char* ho, double wt)
{if ((strcpy_s(name, 20, nm)))cout << "复制失败原字符太长!" << endl;hobby = new char[strlen(ho)+1];strcpy_s(hobby, strlen(ho) + 1, ho);weight = wt;
}
Cow::Cow(const Cow&c)
{strcpy_s(name,20, c.name);hobby = new char[strlen(c.hobby) + 1];strcpy_s(hobby, strlen(c.hobby) + 1, c.hobby);weight = c.weight;
}
Cow::~Cow()
{delete[] hobby;
}
Cow& Cow::operator=(const Cow& c)
{if (this == &c){return *this;}if (hobby)delete[] hobby;strcpy_s(name, 20, c.name);hobby = new char[strlen(c.hobby) + 1];strcpy_s(hobby, strlen(c.hobby) + 1, c.hobby);weight = c.weight;return *this;
}
void Cow::ShowCow()const
{if (hobby == NULL){cout << "母牛的信息为空!" << endl;return;}cout << "母牛的名字为:" << name << endl;cout << "母牛的嗜好为:" << hobby << endl;cout << "母牛的体重为:" << weight << endl;
}

运行结果:
在这里插入图片描述

考查点:

  • 默认构造函数
    在这里插入图片描述
  • 自定义构造函数
    在这里插入图片描述
  • 拷贝构造函数
    在这里插入图片描述
  • 赋值构造函数
    在这里插入图片描述
  • 动态内存分配
    在这里插入图片描述

注意:

  • strcpy_s复制成功的返回值为0
    在这里插入图片描述

  • strlen是得到字符串不带’\0’的长度,所以我们分配内存时需要加1

    在这里插入图片描述

  • 赋值构造函数返回的是引用用于连等
    在这里插入图片描述

  • 如果对象自己赋值自己就可以直接返回.如果原来指针不为空的需要清除
    在这里插入图片描述

  • 析构函数避免内存泄漏
    在这里插入图片描述

2024年9月7日19:48:10

这篇关于【C++ Primer Plus习题】12.1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146193

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页