【C++ Primer Plus习题】13.4

2024-09-09 17:44
文章标签 c++ plus 习题 primer 13.4

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

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

问题:

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

解答:
main.cpp

#include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout << p1 << std::endl<<endl;std::cout << p2 << std::endl << endl;Port p3 = p2;p3.Show();p3 += 3;p3.Show();Port p4 = p2;p3 -= 2;p3.Show();cout << endl;VintagePort vp1("Vabc", 50, "hn", 1983);vp1.Show();cout << endl;VintagePort vp2;vp2.Show();cout << endl;vp1 -= 3;vp2 = vp1;std::cout << vp2 << std::endl;return 0;
}

port.h

#pragma once
#include <iostream>
using namespace std;class Port
{
private:char* brand;char style[20];int bottles;
public:Port(const char* br = "none", const char* st = "none", int b = 0);Port(const Port& p);virtual ~Port() { delete[] brand; }Port& operator=(const Port& p);Port& operator+=(int b);Port& operator-=(int b);int BottleCount()const { return bottles; }virtual void Show()const;friend ostream& operator<<(ostream& os, const Port& p);
};class VintagePort :public Port
{
private:char* nickname;int year;
public:VintagePort();VintagePort(const char*br,int b,const char*nn,int y);VintagePort(const VintagePort&vp);~VintagePort() { delete[] nickname; }VintagePort& operator=(const VintagePort&vp);void Show()const override;friend ostream& operator<<(ostream& os, const VintagePort& vp);
};

port.cpp

#include "port.h"Port::Port(const char* br, const char* st, int b)
{brand = new char[strlen(br) + 1];strcpy_s(brand, strlen(br) + 1, br);strcpy_s(style, strlen(br) + 1, st);bottles = b;
}
Port::Port(const Port& p)
{brand = new char[strlen(p.brand) + 1];strcpy_s(brand, strlen(p.brand) + 1, p.brand);strcpy_s(style, strlen(p.style) + 1, p.style);bottles = p.bottles;
}
Port& Port::operator=(const Port& p)
{if (this == &p)return *this;if (brand)delete[] brand;brand = new char[strlen(p.brand) + 1];strcpy_s(brand, strlen(p.brand) + 1, p.brand);strcpy_s(style, strlen(p.style) + 1, p.style);bottles = p.bottles;return *this;
}
Port& Port::operator+=(int b)
{this->bottles += b;return *this;
}
Port& Port::operator-=(int b)
{this->bottles -= b;return *this;
}
void Port::Show()const
{cout << "Brand:" << this->brand << endl;cout << "Kind:" << this->style << endl;cout << "Bottles:" << this->bottles << endl;
}
ostream& operator<<(ostream& os, const Port& p)
{os << p.brand << "," << p.style << "," << p.bottles;return os;
}VintagePort::VintagePort():Port()
{nickname = new char[1];nickname[0] = '\0';year = 0;
}
VintagePort::VintagePort(const char* br, int b, const char* nn, int y):Port(br,"none",b)
{nickname = new char[strlen(nn) + 1];strcpy_s(nickname, strlen(nn) + 1, nn);year = y;
}
VintagePort::VintagePort(const VintagePort& vp):Port(vp)
{nickname = new char[strlen(vp.nickname) + 1];strcpy_s(nickname, strlen(vp.nickname) + 1, vp.nickname);year = vp.year;
}
VintagePort& VintagePort::operator=(const VintagePort& vp)
{if (this == &vp)return *this;if (nickname)delete[] nickname;Port::operator=(vp);nickname = new char[strlen(vp.nickname) + 1];strcpy_s(nickname, strlen(vp.nickname) + 1, vp.nickname);year = vp.year;return *this;
}
void VintagePort::Show()const
{Port::Show();cout << "nickname:" << nickname << endl;cout << "year:" << year << endl;
}
ostream& operator<<(ostream& os, const VintagePort& vp)
{os << (const Port&)vp << "," << vp.nickname << "," << vp.year << endl;return os;
}

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

考查点:

  • 继承
  • 虚函数

2024年9月9日16:05:29

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



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

相关文章

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

利用Python和C++解析gltf文件的示例详解

《利用Python和C++解析gltf文件的示例详解》gltf,全称是GLTransmissionFormat,是一种开放的3D文件格式,Python和C++是两个非常强大的工具,下面我们就来看看如何... 目录什么是gltf文件选择语言的原因安装必要的库解析gltf文件的步骤1. 读取gltf文件2. 提