slydesu 2023-03-15 21:33 采纳率: 100%
浏览 17
已结题

c++含指针类的拷贝

佬求帮忙!
我的题目要求如下:
通过求三个长方柱的体积的例题来体会构造函数、复制构造函数和析构函数的调用,请编写一个基于对象的程序并按下列功能进行测试。数据成员仅包括长(length)、宽(width)、高(height)。要求用成员函数实现以下功能:

(1)使用带缺省参数的构造函数为对象初始化。

(2)可以由键盘分别输入长方柱的长宽高。

(3)计算3个长方柱的体积。

(4)输出3个长方柱的体积。

(5)类中添加拷贝构造函数和析构函数。

(6)为了更好的体会复制构造函数和析构函数的调用顺序,main函数中添加以下语句的测试。

Box box3(box2);

box1=box2.test1();

box3.test2(box2);
然后我就想顺便了解一下在类中使用指针,结果编译器触发断点,我也一直找不出哪里内存溢出或者有野指针啥的,求帮忙!代码如下:

#pragma once
#include<iostream>
#include<stdio.h>
using namespace std;
class Box
{
private:
    double* length, * width, * heigh;
public:
    Box(double l = 2, double w = 3, double h = 4);
    Box(const Box& b);
    ~Box();
    Box& operator=(const Box& a)
    {
        if (this != &a)
        {
            delete length;
            delete width;
            delete heigh;
            length = NULL;
            width = NULL;
            heigh = NULL;
            length = new double;
            width = new double;
            heigh = new double;
            length = a.length;
            width = a.width;
            heigh = a.heigh;
        }
        return *this;
    }
    void get_value();
    double vol_cal();
    void show();
    Box test1();
    void test2(Box);
};

#include"volume_cal.h"
Box::Box(double l, double w, double h)
{
    length = new double;
    width = new double;
    heigh = new double;
    *length = l;
    *width = w;
    *heigh = h;
    cout << "调用带缺省参数的构造函数" << endl;
};
Box::Box(const Box& b)
{
    length = new double;
    width = new double;
    heigh = new double;
    length = b.length;
    width = b.width;
    heigh = b.heigh;
    cout << "调用拷贝构造函数" << endl;
};
Box::~Box()
{
    delete length;
    delete width;
    delete heigh;
    cout << "调用析构函数" << endl;
};
void Box::get_value()
{
    cout << "请输入长、宽、高:" << endl;
    cin >> *length >> *width >> *heigh;
}
double Box::vol_cal()
{
    return (*length) * (*width) * (*heigh);
};
void Box::show()
{
    cout << vol_cal() << endl;
};
Box Box::test1()
{
    Box box(*length, *width, *heigh);
    return(box);
};
void Box::test2(Box a)
{
    length = a.length;
    width = a.width;
    heigh = a.heigh;
};

#include"volume_cal.h"
int main()
{
    Box box1, box2(3, 6);
    //box1.get_value();
    //box2.get_value();
    //box3.get_value();
    //Box box3(box2);
    box1 = box2.test1();
    //box3.test2(box2);
    box1.show();
    box2.show();
    //box3.show();
}

  • 写回答

3条回答 默认 最新

  • Pailugou 2023-03-16 14:53
    关注

    C++类中如果有指针一般要进行深拷贝,你的拷贝函数中第一次delete掉的是个野指针吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月31日
  • 已采纳回答 3月23日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用