#include<iostream>
using namespace std;
class Vector
{
private:
int *dwp;
int size;
void clone(const Vector v)
{
this->size=v.size;
this->dwp=new int[size];
for(int i=0;i<size;i++)
{
dwp[i]=v[i];//调用重载下标,相当于this->dwp[i]=v.dwp[i]
}
}
void dispose()
{
delete[] dwp; // 删除指针指向的空间,如果不删除,在调用析构函数的时候只会释放指针本身所占用的内存。
}
public:
//拷贝构造,
Vector(const Vector &v)
{
clone(v);
}
Vector(int s ):size(s),dwp(new int[s])
{
if(size<0)
dwp= NULL;
else
{
for(int i=0;i<size;i++)
{
dwp[i]=0;
}
} }
Vector(int *a,int s):size(s),dwp(new int[s])
{
for(int i=0;i<size;i++)
{
dwp[i]=a[i];
}
}
int get_size()const
{
return size;
}
//重载下标。 用于输入。
int& operator[](int index)
{
return dwp[index];
}
//重载下标, 用于输出。加引用的目的是避免产生零时变量,增加开销。
const int& operator[](int index) const
{
return dwp[index];
}
//重载 = 运算符
const Vector& operator=(const Vector& v)
{ if(this!=&v)
{
delete []dwp; //删除dwp指向的空间。
this->size=v.size;
dwp=new int[size]; //开辟新的空间。
for(int i=0;i<size;i++)
{
dwp[i]=v[i];
}
}
}
//析构函数
~Vector()
{
dispose();
}
};
//重载输出
ostream & operator<<(ostream& out,const Vector& v)
{
int s=v.get_size();
for(int i=0; i<s;i++)
{
out<<v[i]<<endl;
}
out<<endl;
return out;
}
//重载输入
istream& operator>>(istream&in,const Vector& v)
{
int s=v.get_size();
for(int i=0;i<s;i++)
{
in>>v[i];
}
return in;
}
int main()
{
int dwint[3]={1,3,5};
cout<<"=========v============"<<endl;
Vector v(dwint,3);
cout<<v; //调用重载输出 v.operator()
cout<<"=========v2============"<<endl;
Vector v2(v);
cout<<v2;
cout<<v2.get_size(); return 0;
}

c++ 拷贝构造练习的更多相关文章

  1. c++拷贝构造和编译优化

    #include <iostream> using namespace std; class MyClass { public: MyClass(); MyClass(int i); My ...

  2. C++ 构造函数、析构函数、拷贝构造、赋值运算符

    之所以要把它们放在一起,是因为在使用C/C++类语言的时候,很容易混淆这几个概念(对Java来说完全没有这样的问题,表示Javaor完全没有压力). 先建立一个测试类(包含.h和.cpp) //~ P ...

  3. C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)

    1.构造函数: >构造函数是一个特殊的.与类同名的成员函数,用于给每一个成员设置适当的初始值. >构造函数不能有返回值,函数名与类名同样. >缺省构造函数时,系统将自己主动调用该缺省 ...

  4. C++拷贝构造&操作符重载

    头文件 DString.h如下 #ifndef __DSTRING_H #define __DSTRING_H #endif #include <stddef.h> class DStri ...

  5. C++对象的构造、析构与拷贝构造

    今天下午在研究虚函数的时候遇到了一个问题,觉得很有意思,记录一下. 先看代码: class Base { public: Base(int value) { m_nValue = value; cou ...

  6. 重点:QObject 的拷贝构造和赋值操作——私有

    QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承 ...

  7. C++之旅:拷贝构造与友元

    拷贝构造与友元 拷贝构造是在构造一个对象的时候将已有对象的属性拷贝给新的对象:友元可以让一个类的所有属性(主要是private)对特定的类开放 拷贝构造 如果没有复写拷贝构造函数,系统会帮我们默认生成 ...

  8. C++ 进阶5 拷贝构造 深度复制 运算符重载

    C++ 进阶5 拷贝构造 深度复制 运算符重载 20131026 例子: 运行环境是G++ 编译, /* * main.cpp * *  Created on: 2013年10月26日 *      ...

  9. 拷贝构造和拷贝赋值、静态成员(static)、成员指针、操作符重载(day06)

    十七 拷贝构造和拷贝赋值 浅拷贝和深拷贝 )如果一个类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针变量的本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝. )浅拷贝将导致不同对象 ...

随机推荐

  1. ASDL + WN725N 配置无线AP

    1.  ASDL 正常拨号上网 2.  安装TP-LINK无线客户端应用程序 打开之后选择模拟AP 如下图设置----应用 3.  本地连接----属性----高级 如下图设置 4.  宽带连接--- ...

  2. POJ 3177 Redundant Paths 边双(重边)缩点

    分析:边双缩点后,消环变树,然后答案就是所有叶子结点(即度为1的点)相连,为(sum+1)/2; 注:此题有坑,踩踩更健康,普通边双缩短默认没有无向图没有重边,但是这道题是有的 我们看,low数组是我 ...

  3. MapReduce自定义二次排序流程

    每一条记录开始是进入到map函数进行处理,处理完了之后立马就入自定义分区函数中对其进行分区,当所有输入数据经过map函数和分区函数处理完之后,就调用自定义二次排序函数对其进行排序. MapReduce ...

  4. 利用迅雷提供的接口从磁力链得到bt种子文件

    本地下载工具的磁力链下载速度不给力,而百度云盘有提供离线下载服务,相当于就是直接到服务器取个链接而已.但这需要bt文件,而我只有链力链.网上搜了一下,可以从磁力链构造一个bt文件的下载地址,用pyth ...

  5. StackOverflow:7个你从未见过的Java问题最佳答案

    本文由码农网 – 李俊英原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 对开发人员来说, StackOverflow就像一个金矿.对具体的问题,它能帮我们找到最有用的答案,并且我们也 ...

  6. [C++]Microsoft Visual Studio (VS)2010 常用快捷键大全

    VAssistX快捷键 Ctrll+Shift+S   快速查找函数位置  VAssistX提供 Shift+Alt+O     快速查找打开单元  VAssistX提供 Alt+O         ...

  7. STM32硬件调试详解

    STM32的基本系统主要涉及下面几个部分: 一.电源 1).无论是否使用模拟部分和AD部分,MCU外围出去VCC和GND,VDDA.VSSA.Vref(如果封装有该引脚)都必需要连接,不可悬空: 2) ...

  8. home_work--用户登陆

    前提: 根据文本中的已有用户和密码,实现登陆的交互:在用户输入用户名后,会有一个检测用户是否被锁定的环节:如果用户三次密码输入错误,则该用户则会被添加到锁定文件中,无法登陆. 涉及到的知识点: 1.p ...

  9. 命令删除visualstudio.com云端项目(TFS)

    1.运行命令行 2.tfsdeleteproject /collection:https://域名.visualstudio.com/DefaultCollection “项目名称”

  10. Linux下JDK安装位置

    新手在Linux上安装JDK时,不知道应该将JDK安装在哪比较合适.首先简要了解下Linux中部分目录的作用. /bin---用来贮存用户命令./usr/bin 也被用来贮存用户命令.  /sbin- ...