`
_jia_shun
  • 浏览: 27238 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

C++大学基础教程_11_8_实例研究:Array类

 
阅读更多
//Array.h

#ifndef ARRAY_H_
#define ARRAY_H_
#include <iostream>
using namespace std;

class Array
{
	//友元函数---同时也是重载运算符函数
	friend ostream &operator<<(ostream &,const Array &);
	friend istream &operator>>(istream&,Array &);
public:
	Array(int = 10);//构造函数
	Array(const Array &);//拷贝构造函数
	~Array();//析构函数
	int getSize() const;
	const Array &operator=(const Array &);//重载=
	bool operator==(const Array &) const;//重载==
	bool operator!=(const Array &right) const
	{
		return !(*this == right);//重载!=,利用重载的==函数
	}
	int &operator[](int);//重载[]适用于不是const的对象
	int operator[](int) const;//适用于const对象
private:
	int size;//存放数组的元素个数
	int *Ptr;//指向每个数组第元素的指针
};

#endif

 

//Array.cpp

#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
#include "Array.h"

//友元重载操作符'<<'函数
//注意输出操作符是output
ostream &operator<<(ostream &output,const Array &testArray)
{
	int i;
	for(i=0;i<testArray.size;i++)
	{
		output << setw(12) << testArray.Ptr[i];
		if((i+1)%4 == 0)//换行
			output << endl;
	}
	if(i%4 != 0)
		output << endl;
	return output;
}

//友元重载操作符'>>'函数
//注意输出操作符是input
istream &operator>>(istream &input,Array &testArray)
{
	for(int i=0;i<testArray.size;i++)
		input >> testArray.Ptr[i];
	return input;
}

Array::Array(int arraySize)
{
	size = (arraySize>0 ? arraySize:10);/*错把两个arraySize写成size!!,蛋疼的错误
	                                                         前后arraySize不一致,试试看咯,简直掉渣天*/
	Ptr = new int[size];
	for(int i=0;i<size;i++)//给数组元素全部赋值为0
		Ptr[i] = 0;
}

//拷贝构造函数
Array::Array(const Array &arrryToCopy)
	:size(arrryToCopy.size)
{
	Ptr = new int[size];
	for(int i=0;i<size;i++)
		Ptr[i] = arrryToCopy.Ptr[i];
}

Array::~Array()
{
	delete [] Ptr;
	Ptr = 0;
}

int Array::getSize() const
{
	return size;
}

//重载=
const Array &Array::operator=(const Array &testArray)
{
	if(this->Ptr != testArray.Ptr)//避免自我复制,赋值
	{
		if(size != testArray.size)
		{
			size = testArray.size;
			delete [] Ptr;
			Ptr = new int[testArray.size];
			for(int i=0;i<size;i++)
				Ptr[i] = testArray.Ptr[i];
		}
	}
	return *this;
}

//重载==
bool Array::operator==(const Array &testArray) const
{
	if(this->size != testArray.size)
		return false;
	for(int i=0;i<testArray.size;i++)
		if(this->Ptr[i] != testArray.Ptr[i])
			return false;
	return true;
}

//重载[],适用不是const的对象
int &Array::operator[](int number)
{
	if((number<0)||(number>=this->size))
		cout << "\nError:number " << number 
		       << "out of range." << endl;
	return this->Ptr[number];
}

int Array::operator[](int number) const
{
	if((number<0)||(number>=this->size))
		cout << "\nError:number " << number 
		       << "out of range." << endl;
	return this->Ptr[number];
}

 

//main.cpp

#include "Array.h"
#include <iostream>
using namespace std;

int main()
{
	Array integers1(7);
	Array integers2;
	cout << "Size of integers1 is " << integers1.getSize()
		   << "\nArray after initialization:\n"  
		   << integers1 << endl;//调用重载运算符函数<<
	cout << "Size of integers2 is " << integers2.getSize()
		   << "\nArray after initialization:\n" 
		   << integers2 ;//调用重载运算符函数<<
	cout << "Enter 17integers:"<< endl;
	cin >> integers1 >> integers2;//调用重载运算符函数>>
	cout << "\nAfter input ,the array contains:\n" 
		   << "Integers1:\n" << integers1
		   << "Integers2:\n" << integers2;
	cout << "\nEvaluating: integers1!=integers2" << endl;
	if(integers1 != integers2)
		cout << "integers1 and integers2 are not equal." << endl;
	
	Array integers3(integers1);//拷贝构造函数
    cout << "Size of integers3 is " << integers3.getSize()
		   << "\nArray after initialization:\n"  
		   << integers3 << endl;//调用重载运算符函数<<

	cout << "Assigning integers2 to integers1:" << endl;
	integers1 = integers2;//调用重载运算符函数=
	cout << "integer1:\n" << integers1
		   << "\ninteger2:\n" << integers2;

	cout << "Evaluating : integers1==integers2 :" << endl;
	if(integers1 == integers2)//调用重载运算符函数==
		cout << "integers1 and integers2 are equal." << endl;

	cout << "integers1[5] is " << integers1[5] << endl;//调用重载运算符函数[] 
	cout << "Assigning 1000 to integers1[5]" << endl;
	integers1[5] = 1000;
	cout << "integers1:\n" << integers1 << endl;
	cout << "Attempt to assign 1000 to integers1[15]" << endl;
	integers1[15] = 1000; 

	system("pause >> cout");
	return 0;
}

 

 

 

  • 大小: 142.9 KB
  • 大小: 68.9 KB
分享到:
评论

相关推荐

    C++大学教程,一本适合初学者的入门教材(part1)

    8.8 实例研究:Array类 8.9 类型之间的转换 8.10 实例研究:String类 8.11 重载十十与—— 8.12 实例研究:Date类 小结 术语 自测练习 自测练习答案 练习 第9章 继承 9.1 简介 9.2 继承:基类和派生类 9.3 ...

    每天学点C++(C++实例教程:教程+源码)数组.zip

    C++是一种强大的、通用的编程语言,以其...总的来说,C++中的数组是编程中不可或缺的基础工具,理解并熟练运用数组是每个C++程序员的必备技能。通过本教程和配套源码的学习,你将能够有效地利用数组解决各种实际问题。

    c++实例教程

    《C++实例教程》是一本深入浅出的编程学习资料,专注于通过实例来教授C++这一强大而广泛使用的编程语言。C++是面向对象编程的基石,被广泛应用于游戏开发、系统软件、设备驱动程序、实时交易系统以及各种高性能计算...

    c++经典教程(代码实例)

    一、C++基础知识 C++起源于C语言,由Bjarne Stroustrup在1983年为增加面向对象特性而扩展。它包含了C语言的所有特性,并增加了类、模板、命名空间等新元素。在本教程中,你将学习到变量声明、基本数据类型(如int、...

    C++教程_谭浩强 电子教案以及程序代码

    3. **类与对象**:C++是一种面向对象的语言,类是创建对象的蓝图,对象是类的实例。教程将详细介绍类的构造函数、析构函数、成员函数、访问修饰符(public、private、protected)以及封装的概念。 4. **继承与多态*...

    C++大学教程,一本适合初学者的入门教材(part2)

    8.8 实例研究:Array类 8.9 类型之间的转换 8.10 实例研究:String类 8.11 重载十十与—— 8.12 实例研究:Date类 小结 术语 自测练习 自测练习答案 练习 第9章 继承 9.1 简介 9.2 继承:基类和派生类 9.3 ...

    白话C++.,非常好的C++入门级教程

    《白话C++》是一本非常适合初学者的C++教程,其主要目标是用通俗易懂的语言介绍C++编程的基础知识,帮助读者快速进入C++的世界。C++是一种强大而灵活的面向对象编程语言,广泛应用于系统软件、游戏开发、应用软件...

    C++电子教程 程序开发教程 程序开发教程 程序开发教程

    总的来说,这份C++电子教程涵盖了从基础到进阶的所有关键知识点,对于想要提升C++编程技能的初学者和有一定经验的程序员来说,都是一个宝贵的资源。通过深入学习并实践教程中的示例,你可以逐步掌握C++编程,从而更...

    C++ Builder6编程实例精解

    本书面向已有C/C++基础并对C++ Builder有一定了解的程序员或爱好者,旨在提升其开发较大规模实用应用程序的能力。不仅适用于个人学习,也可作为软件开发团队的参考资料,特别是对于希望深化C++ Builder6编程技能的...

    C_C++初学者教程

    ### C_C++初学者教程知识点概述 #### 一、C/C++编程语言简介 - **C语言**: C语言是一种结构化编程语言,由Dennis Ritchie于1972年在贝尔实验室开发。它被广泛用于系统编程和嵌入式系统开发。 - **C++语言**: C++是...

    C++课件PPT基础入门

    总之,"C++课件PPT基础入门"是一个理想的起点,为那些希望进入C++编程世界的初学者提供了全面且易懂的教程。通过系统的学习和练习,不仅可以掌握C++的基础,也为后续的进阶学习打下坚实的基础。

    c++进阶(stl资源),非原创,配套b站(C++进阶之STL)教程

    **C++进阶:STL资源详解** C++标准模板库(Standard Template Library,简称STL)是C++编程中的一个重要组成部分,它提供了一系列高效、泛用的容器、迭代器...记得结合配套的B站教程,通过实例和练习来巩固所学知识。

    c++教程基础

    根据给定的信息,我们可以整理出一份关于C++基础教程的关键知识点。这份教程旨在为初学者提供全面的基础指导,涵盖从程序结构到面向对象编程的重要概念。 ### 一、C++程序的基本结构 C++程序的基本结构是理解如何...

    入门教程:易学c++

    《入门教程:易学C++》是一份专为初学者设计的C++编程教程,旨在帮助新接触编程的读者快速掌握C++语言的基础知识。C++是一种强大的、面向对象的编程语言,它在软件开发领域有着广泛的应用,尤其是在系统软件、游戏...

    c++编程思想源码

    一、C++基础概念 1. 类与对象:C++的核心是面向对象编程,类是对象的蓝图,用于封装数据和操作。`codeone`和`codetwo`中可能包含各种类的设计,如构造函数、析构函数、成员函数、友元函数等。 2. 继承与多态:继承...

    易学C++ (Easy C++) 中文PDF文字版 附习题答案及书中源码

    《易学C++》是一本面向初学者的C++编程教程,旨在帮助读者轻松入门C++这门强大的编程语言。本书以中文呈现,适合中文环境下的学习者阅读,提供了清晰的解释和实例,使得复杂的概念变得易于理解。此外,附带的习题...

    清华大学 C++ PPT讲稿

    【清华大学 C++ PPT讲稿】是一份详细深入的C++教学资料,源自中国的顶级学府清华大学。这份讲稿涵盖了C++编程语言的基础至高级概念,旨在帮助学习者全面掌握C++这一强大的系统级和应用级编程语言。通过这份资料,你...

    C++傻瓜教程

    本教程通过简洁易懂的语言和丰富的实例,为初学者提供了全面而系统的C++学习路径。 在C++的学习过程中,首先要理解基础语法,包括变量、数据类型、运算符和控制流(如if语句、switch语句、循环)。这些构成了程序的...

    掌握C++标准类.rar

    在“掌握C++标准类”教程中,可能会详细讲解这些概念,并通过实例代码演示如何使用它们。学习者会了解到如何利用`std::ifstream`和`std::ofstream`进行文件操作,如何使用`std::queue`和`std::stack`实现数据结构,...

    C++基础知识.rar

    这个名为"C++基础知识.rar"的压缩包文件似乎是一个针对初学者的C++入门教程,旨在帮助学习者掌握C++的基础概念和编程技巧。 在C++的基础知识中,首先会介绍C++的历史和其与其他编程语言的关系,然后逐步深入到语言...

Global site tag (gtag.js) - Google Analytics