#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. json解析之jackson ObjectMapper

    Json解析常用的有fastjson和jackson,性能上网上有不少的对比,说是fastjson比较好,今天先整理一下jackson的东西,后面再发一个fastjson的. jackson是spri ...

  2. POJ 2986 A Triangle and a Circle 圆与三角形的公共面积

    计算几何模板 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h& ...

  3. codeforce 605B. Lazy Student

    题意:n点,m条边.m条边里面标记为1的最小生成树的边,0为非最小生成树的边.给了每条边的权,如果能构成一个最小生成树则输出图,否则-1. 思路:先按权值小,为生成数边的顺序排序.(根据kruskal ...

  4. jitsi-meet

    Jitsi Meet在Ubuntu上的快速安装与卸载 1. 进入到终端,切换到root用户 # sudo su 添加相应的代码仓库: # echo 'deb http://download.jitsi ...

  5. Java内存管理原理及内存区域详解

    一.概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间.Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下 ...

  6. 【C++深入浅出】智能指针之auto_ptr学习

    起:  C++98标准加入auto_ptr,即智能指针,C++11加入shared_ptr和weak_ptr两种智能指针,先从auto_ptr的定义学习一下auto_ptr的用法. template& ...

  7. 可学习的多人人脸识别程序(基于Emgu CV)

    源代码下载(需要安装Emgu CV,安装方法请百度) 很多朋友使用Emgu CV遇到CvInvoke()的报错,我找到一种解决方法. 把EmguCV目录下bin里面的所有dll复制到C:\WINDOW ...

  8. ECSHOP在线手册布局参考图--文章列表页 article_cat.dwt

        A.购物车 1,设置方法 程序自动读取购物车的商品数量 2,代码相关 cart.lbi 中 {insert_scripts files='transport.js'} <div clas ...

  9. SCOM MP中的PowerShell脚本

    该脚本可在MP中运行 #param ($file,$threshold) #此处可定义file 和 threshold 参数,该参数可以从脚本外部接收 $threshold = 10 $file = ...

  10. Parse error: syntax error, unexpected T_PUBLIC in 问题解决

    class 类中 public function _getInfo($sn){        $title = '';        $_array = explode('~', $sn);      ...