2024/2/5

第四章  堆与拷贝构造函数

 一 、程序阅读题

1、给出下面程序输出结果。

#include <iostream.h>

class example

{int a;

public:

example(int b=5){a=b++;}

void print(){a=a+1;cout <<a<<"";}

void print()const

{cout<<a<<endl;}

};

void main()

{example x;

const example y(2);

x.print();       

y.print();       

}

答:6 2

2、运行程序,写出程序执行的结果。

#include<iostream.h>

class Location

{   public:

int X,Y;

void init(int initX,int initY);

int GetX();

int GetY();

};

void Location::init (int initX,int initY)

{X=initX;

Y=initY;

}

int Location::GetX()

{return X;

}

int Location::GetY()

{return Y;

}

void display(Location& rL)

{cout<<rL.GetX()<<" "<<rL.GetY()<<'\n';

}

void main()

{

Location A[5]={{5,5},{3,3},{1,1},{2,2},{4,4}};

Location *rA=A;

A[3].init(7,3);

rA->init(7,8);

for (int i=0;i<5;i++)

display(*(rA++));

}

答:

7  8

3  3

1  1

7  3

4  4

3. 给出下面程序输出结果。

#include <iostream.h>

int a[8]={1,2,3,4,5,6,7};

void fun(int *pa,int n);

void main()

{int m=8;

fun(a,m);

cout<<a[7]<<endl;

}

void fun(int *pa,int n)

{for (int i=0;i<n-1;i++)

*(pa+7)+=*(pa+i);

}

答:28

4. 给出下面程序输出结果。

#include <iostream.h>

class A

{

int *a;

public:

A(int x=0):a(new int(x)){}

~A() {delete a;}

int getA() {return *a;}

void setA(int x) {*a=x;}

};

void main()

{

A x1,x2(3);

A *p=&x2;

(*p).setA(x2.getA()+5);

x1.setA(10+x1.getA());

cout<<x1.getA()<<""<<x2.getA()<<endl;    

}

答:10 8

5. 阅读下面的程序,写出运行结果:

#include < iostream.>

using namespace std;

class Samp

{

public:

    void Set_i_j(int a, int b){i=a,j=b;}

    ~Samp()

    {

        cout <<"Destroying.." << i <<endl;

    }

    int GetMulti () { return i * j; }

protected:

int i;

int j;

};

int main ()

{

Samp * p;

p = new Samp[l0];

if(!p)

{

cout << "Allocation error \ n";

return;

}

for(int j =0; j<l0; j ++)

    p[j]. Set_i_j (j, j);

for(int k=0; k<l0; k++)

    cout <<"Multi[" <<k <<"] is:"<< p[k].GetMulti () <<endl;

delete [ ] p;

return 0;

}

答:

Multi[0] is:0

Multi[1] is:1

Multi[2] is:4

Multi[3] is:9

Multi[4] is:16

Multi[5] is:25

Multi[6] is:36

Multi[7] is:49

Multi[8] is:64

Multi[9] is:81

Destroying..9

Destroying..8

Destroying..7

Destroying..6

Destroying..5

Destroying..4

Destroying..3

Destroying..2

Destroying..1

Destroying..0 

6. 写出下面程序的运行结果,请用增加拷贝构造函数的方法避免存在的问题。

#include < iostream>

using namespace std;

class Vector

{

public:

    Vector (int s = 100);

    int& Elem(int ndx);

    void Display();

    void Set ();

    ~Vector ();

protected:

int size;

int* buffer;

}

Vector::Vector (int s)

{

buffer = new int [size = s];

for(int i = O; i<size; i + + )

    buffer [i] = i* i;

}

int& Vector:: Elem(int ndx)

{

    if(ndx< 0 || ndx> = size)

    {

        cout << "error in index" <<endl;

        exit (1);

    }

    return buffer [ndx];

}

void Vector::Display ()

{

    for(int j =0; j< size; j ++)

    cout << buffer[j] <<endl;

}

void Vector:: Set ()

{

    for(int j =0; j<size; j++)

        buffer[j] = j + 1;

}

Vector:: ~ Vector()

{

    delete [] buffer;

}

int main()

{

    Vector a(10);

    Vector b(a);

    a. Set ();

    b. Display ();

return 0;

}

答:

1

1

4

9

16

25

36

49

64

81

7.读下面的程序与运行结果,添上一个拷贝构造函数来完善整个程序。

    

#include < iostream>

using namespace std;

class CAT

{

public:

    CAT();

    CAT(const CAT&);

    ~CAT();

    int GetAge() const (return * itsAge;)

    void SetAge(int age) { * itsAge = age; }

protected:

int * itsAge;

};

CAT::CAT ()

{

itsAge = new int;

*itsAge = 5;

}

CAT::~CAT ()

{

    delete itsAge;

    itsAge = 0;

}

void main()

{

    CAT frisky;

    cout << "frisky's age:" << frisky. GetAge() <<endl;

    cout <<"Setting frisky to 6... \ n";

    frisky. SetAge ( 6 );

    cout << "Creating boots from frisky \ n";

    CAT boots(frisky);

    cout <<"frisky's age:" << frisky. GetAge() <<endl;

    cout << "boots'age:" << boons. GetAge () <<endl;

    cout << "setting frisk,, to 7 .... n";

    frisky. SetAge (7);

    cout <<"frisky"s age:" << frisky. GetAge() <<endl;

    cout <<"boots' age:" << boots. GetAge() <<endl;

}

答:

   frisky's age:5

    Setting frisky to 6...

    Creating boots from frisky

    frisky's age:6

    boots' age:6

    Setting frisky to 7...

    frisky's age:7

    boots' age:6

添加

CAT::CAT(const CAT& other) {
    itsAge = new int;

    *itsAge = *other.itsAge;

}

CAT::~CAT() {
    delete itsAge;

    itsAge = 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669519.shtml

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

相关文章

信任与创新 | 回顾通付盾的2023!

-END- 数信云&#xff0c;基于区块链与人工智能的数据安全应用与服务平台

【Spring】Spring 启示录

一、OCP 开闭原则 核⼼&#xff1a;在扩展系统功能时不需要修改原先写好的代码&#xff0c;就是符合OCP原则的&#xff0c;反之修改了原先写好的代码&#xff0c;则违背了OCP原则的 若在扩展系统功能时修改原先稳定运⾏程序&#xff0c;原先的所有程序都需要进⾏重新测试&…

N-143基于springboot博客系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;AdminLTEHTML 服务端技术&#xff1a;springbootmybatis-plusthymeleaf 本项目分前台和后台&#xff0c;主要有普…

FM波的调制与解调

一、实验原理 1.FM的调制 产生调频信号有两种方法&#xff0c;直接调频法和间接调频法。间接调频法就是可以通过调相间接实现调频的方法。但电路较复杂&#xff0c;频移小&#xff0c;且寄生调幅较大&#xff0c;通常需多次倍频使频移增加。对调频器的基本要求是调频频移大&am…

如何实现一个(PE 文件)内存加载器(来自ChatGPT)

实现一个内存加载器&#xff08;通常指的是一个PE Loader&#xff0c;用于在内存中加载和执行Windows可执行文件&#xff09;是一项复杂的工作&#xff0c;它涉及对PE文件格式的深入了解以及对Windows操作系统内部工作机制的理解。下面是一个简化版本的概述&#xff0c;用于描述…

大数据Doris(六十三):基于Doris的有道精品课数据中台建设实践

文章目录 基于Doris的有道精品课数据中台建设实践 一、背景

【Java程序设计】【C00245】基于Springboot的家政服务管理平台(有论文)

基于Springboot的家政服务管理平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的家政服务管理平台 本系统分为前台模块、管理员功能模块、用户功能模块以及服务人员功能模块。 前台模块&#xff1a;系统首页的…

R语言入门笔记2.1

分支、循环与函数&#xff08;1&#xff09; 1.if语句 在R语言中&#xff0c;if语句用于根据条件执行不同的代码块。其基本语法如下&#xff1a; if (condition) {# 如果条件为真&#xff0c;执行这里的代码块 } else {# 如果条件为假&#xff0c;执行这里的代码块 } 其中&…

vue H5 跳转到uniAPP小程序并传参

uni-app小程序部分问题无法解决&#xff0c;采用webview-&#xff08;vue&#xff09;独立开发一部分功能&#xff0c;需要来回跳转并携带参数&#xff1b;官网文档很多写的不详细&#xff0c;遇到很多坑&#xff0c;这里记录一下。 uni-app小程序跳转至网页并互相带参_情已得…

Spring IOC 之深入分析 Aware 接口

&#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是小徐&#x1f947;☁️博客首页&#xff1a;CSDN主页小徐的博客&#x1f304;每日一句&#xff1a;好学而不勤非真好学者 &#x1f4dc; 欢迎大家关注&#xff01; ❤️ &#xfeff;AbstractAutowireCapableBeanFacto…

力扣分式化简

题目描述&#xff1a; 有一个同学在学习分式。他需要将一个连分数化成最简分数&#xff0c;你能帮助他吗&#xff1f; 连分数是形如上图的分式。在本题中&#xff0c;所有系数都是大于等于0的整数。 输入的cont代表连分数的系数&#xff08;cont[0]代表上图的a0&#xff0c;以…

突破编程_C++_基础教程(指针)

1 指针的基础概念 指针是 C 的核心之一&#xff0c;使用 C 语言构建的程序之所以性能强悍&#xff0c;有很大部分原因是体现在使用指针直接操作内存。当然这样的工具是一把双刃剑&#xff0c;错误的指针操作可能会导致程序崩溃或者数据损坏。 指针主要有四个方面的用途&#x…

对象分配内存时的指针碰撞与空闲列表机制

指针碰撞 如果java堆中的内存时绝对规整的&#xff0c;所有用过的内存都放在一边&#xff0c;空闲的内存都放在另一边&#xff0c;中间放着一个指针作为分界点的指示器&#xff0c;那所分配内存就是仅仅把那个指针指向空闲空间那边挪动一段与对象大小相等的距离。 空闲列表 …

Java学习-枚举类和泛型

1.枚举 什么是枚举类&#xff1f;格式是什么&#xff1f;&#xff1f; 枚举类的特点&#xff1a; 抽象枚举的注意点&#xff1a; 枚举的使用场景&#xff1a; 示例&#xff1a;枚举类对象作为参数传递 2.泛型 对泛型的认识&#xff1a; 自定义泛型类&#xff1a; 格式&#xff…

MySQL-运维-读写分离

一、介绍 二、一主一从读写分离 三、双主双从 1、介绍 2、准备 3、搭建 四、双主双从读写分离

“极简壁纸“爬虫JS逆向·实战

文章目录 声明目标分析确定目标目标检索 代码补全完整代码 爬虫逻辑完整代码 运行结果 声明 本教程只用于交流学习&#xff0c;不可用于商业用途&#xff0c;不可对目标网站进行破坏性请求&#xff0c;请遵守相关法律法规。 目标分析 确定目标 获取图片下载链接 目标检索…

c#directory 和directoryinfo的使用

当使用C#处理目录时&#xff0c;可以使用 System.IO 命名空间中的 Directory 和 DirectoryInfo 类来执行各种目录操作。以下是一些基本操作的示例&#xff1a; 创建目录 string directoryPath "C:\path\to\directory"; Directory.CreateDirectory(directoryPath);…

OpenGL 入门(九)—Material(材质)和 光照贴图

文章目录 材质设置材质光的属性脚本实现 光照贴图漫反射贴图高光反射贴图 材质 材质本质是一个数据集&#xff0c;主要功能就是给渲染器提供数据和光照算法。 如果我们想要在OpenGL中模拟多种类型的物体&#xff0c;我们必须针对每种表面定义不同的材质(Material)属性。 我们…

【实训】自动运维ansible实训(网络管理与维护综合实训)

来自即将退役学长的分享&#xff0c;祝学弟学妹以后发大财&#xff01; 一 实训目的及意义 1.1 实训目的 1、熟悉自动化运维工具&#xff1a;实训旨在让学员熟悉 Ansible 这一自动化运维工具。通过实际操作&#xff0c;学员可以了解 Ansible 的基本概念、工作原理和使用方法…

Obsidian使用ddnsto穿透nas的webdav功能实现跨平台同步

之前一直用坚果云的webdav功能做obsidian的跨平台同步&#xff08;Windows&#xff0c;Ubuntu&#xff0c;iOS&#xff09;&#xff0c;但是今天在新的工作机上部署obsidian时&#xff0c;发现一次同步的文件数量超过了坚果云的限制&#xff08;付费用户好像是500次&#xff09…