c++ 拷贝构造练习
#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++ 拷贝构造练习的更多相关文章
- c++拷贝构造和编译优化
#include <iostream> using namespace std; class MyClass { public: MyClass(); MyClass(int i); My ...
- C++ 构造函数、析构函数、拷贝构造、赋值运算符
之所以要把它们放在一起,是因为在使用C/C++类语言的时候,很容易混淆这几个概念(对Java来说完全没有这样的问题,表示Javaor完全没有压力). 先建立一个测试类(包含.h和.cpp) //~ P ...
- C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)
1.构造函数: >构造函数是一个特殊的.与类同名的成员函数,用于给每一个成员设置适当的初始值. >构造函数不能有返回值,函数名与类名同样. >缺省构造函数时,系统将自己主动调用该缺省 ...
- C++拷贝构造&操作符重载
头文件 DString.h如下 #ifndef __DSTRING_H #define __DSTRING_H #endif #include <stddef.h> class DStri ...
- C++对象的构造、析构与拷贝构造
今天下午在研究虚函数的时候遇到了一个问题,觉得很有意思,记录一下. 先看代码: class Base { public: Base(int value) { m_nValue = value; cou ...
- 重点:QObject 的拷贝构造和赋值操作——私有
QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承 ...
- C++之旅:拷贝构造与友元
拷贝构造与友元 拷贝构造是在构造一个对象的时候将已有对象的属性拷贝给新的对象:友元可以让一个类的所有属性(主要是private)对特定的类开放 拷贝构造 如果没有复写拷贝构造函数,系统会帮我们默认生成 ...
- C++ 进阶5 拷贝构造 深度复制 运算符重载
C++ 进阶5 拷贝构造 深度复制 运算符重载 20131026 例子: 运行环境是G++ 编译, /* * main.cpp * * Created on: 2013年10月26日 * ...
- 拷贝构造和拷贝赋值、静态成员(static)、成员指针、操作符重载(day06)
十七 拷贝构造和拷贝赋值 浅拷贝和深拷贝 )如果一个类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针变量的本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝. )浅拷贝将导致不同对象 ...
随机推荐
- UVA 11624 Fire! BFS搜索
题意:就是问你能不能在火烧到你之前,走出一个矩形区域,如果有,求出最短的时间 分析:两遍BFS,然后比较边界 #include<cstdio> #include<algorithm& ...
- WebKit 内核浏览器 initKeyboardEvent 函数原型
学习JS发送自定义键盘(KeyboardEvent)事件的过程中,遇到了一个小难题:单个按键Tab可以正常发送,焦点能够转移到下一个元素,但想实现Shift+Tab,反向移动焦点时,却被DOM3的浏览 ...
- 位图9宫格 BitmapSlice9.jsfl
/** * Version 1.1, May 4: fixed issue with symbols in library folders. **/ /** * BitmapSlice9 JSFL b ...
- Base-Android快速开发框架(四)--网络操作之FastJson以及AsyncHttpClient
Android的展示数据,除了上章所讲的本地存储外,大部分数据都来自于网络.首先介绍一下Android APP开发常见的网络操作方式.从网络层面上有底层的tcp/ip,也就是我们常见的socket套接 ...
- 深入浅出 JavaScript 数组 v0.5
有一段时间不更新博客了,今天分享给大家的是一篇关于JS数组的,数组其实比较简单,但是用法非常灵活,在工作学习中应该多学,多用,这样才能领会数组的真谛. 以下知识主要参考<JS 精粹>和&l ...
- leetcode@ [315/215] Count of Smaller Numbers After Self / Kth Largest Element in an Array (BST)
https://leetcode.com/problems/count-of-smaller-numbers-after-self/ You are given an integer array nu ...
- SQL Server Cpu 100% 的常见原因及优化
SQL Server Cpu 100% 的情况并不太常见,一般引起 SQL Server 产生性能问题的,都是 阻塞.连接数.IO 磁盘等.所以,一般SQL Server 的使用率都是比较低的.但是, ...
- Eclipse安装ADT插件
安卓开发环境搭建,如果选择的是ADT Bundle,则包含了eclipse和adt tools.但是有些时候是在已经独立安装了Eclipse的基础上,在线安装ADT插件,就稍微麻烦了. 一.在线安装A ...
- 编译vo-aacenc遇到的问题
sourceforge更新了vo-aacenc到0.1.3,就把自己的编码器也更新到最新.编译过程中无聊多测试了一下 发现一个小问题http://sourceforge.net/projects/op ...
- 纯CSS3实现的图片滑块程序,效果非常酷
接下来我们一起来分析一下源码,首先是HTML代码,非常简单: <div id="gal"> <nav class="galnav"> & ...