2-2、对象数组实践
代码:
//Coordinate.h文件
class Coordinate
{
public:
Coordinate();
~Coordinate();
int m_iX;
int m_iY;
private:
};
//Coordinate.cpp文件
#include<iostream>
#include"Coordinate.h"
using namespace std;
Coordinate::Coordinate()
{
cout<<"Coordinate()"<<endl;
}
Coordinate::~Coordinate()
{
cout<<"~Coordinate()"<<endl;
}
//main函数文件
#include<iostream>
#include<stdlib.h>
#include"Coordinate.h"
using namespace std;
/******************************/
/*对象数组
要求:
定义Coordinate类
数据成员:m_iX和m_iY
分别从栈中和堆中实例化长度为3的对象数组
给数组中的元素分别赋值
遍历两个数组
*/
/******************************/
int main(void)
{
Coordinate coor[3];
coor[0].m_iX = 3;
coor[0].m_iY = 5;
Coordinate *p = new Coordinate[3];
p->m_iX = 7;
p[0].m_iY = 9; //等价于p->m_iY = 9;
p++; //p = p+1 p+=1;
p->m_iX = 11;
p[0].m_iY = 13;
p[1].m_iX = 15;
p++;
p->m_iY = 17;
for(int i = 0;i < 3 ;i++)
{
cout<<"coor_x"<<coor[i].m_iX<<endl;
cout<<"coor_y"<<coor[i].m_iY<<endl;
}
for(int j = 0;j < 3;j++)
{
cout<<"p_x"<<p->m_iX<<endl;
cout<<"p_y"<<p->m_iY<<endl;
p--;
}
p++;
delete []p;
p = NULL;
system("pause");
return 0;
}
2-6、对象成员实践
//Coordinate2_6.h文件
{
public:
Coordinate(int x,int y);
~Coordinate();
void setX(int x);
int getX();
void setY(int y);
int getY();
private:
int m_iX;
int m_iY;
};
//Line2_6.h文件
#include"Coordinate2_6.h"
class Line
{
public:
Line(int x1,int y1,int x2,int y2);
~Line();
void setA(int x,int y);
void setB(int x,int y);
void pirntInfo();
private:
Coordinate m_coorA;
Coordinate m_coorB;
};
//Coordinate2_6.cpp文件
#include<iostream>
#include"Coordinate2_6.h"
using namespace std;
Coordinate::Coordinate(int x,int y)
{
m_iX = x;
m_iY = y;
cout<<"Coordinate() "<<m_iX<<" , "<<m_iY<<endl;
}
Coordinate::~Coordinate()
{
cout<<"~Coordinate() "<<m_iX<<" , "<<m_iY<<endl;
}
void Coordinate::setX(int x)
{
m_iX = x;
}
int Coordinate::getX()
{
return m_iX;
}
void Coordinate::setY(int y)
{
m_iY = y;
}
int Coordinate::getY()
{
return m_iY;
}
//Line2_6.cpp文件
#include"Line2_6.h"
#include<iostream>
using namespace std;
Line::Line(int x1,int y1,int x2,int y2):m_coorA(x1,y1),m_coorB(x2,y2)
{
cout<<"Line()"<<endl;
}
Line::~Line()
{
cout<<"~Line()"<<endl;
}
void Line::setA(int x,int y)
{
m_coorA.setX(x);
m_coorA.setY(y);
}
void Line::setB(int x,int y)
{
m_coorB.setX(x);
m_coorB.setY(y);
}
void Line::pirntInfo()
{
cout<<"("<<m_coorA.getX()<<","<<m_coorA.getY()<<")"<<endl;
cout<<"("<<m_coorB.getX()<<","<<m_coorB.getY()<<")"<<endl;
}
//2-6main文件
//2-6对象成员实践
#include<iostream>
#include<stdlib.h>
#include"Line2_6.h"
using namespace std;
/****************************************/
/*对象成员
要求:
定义两个类:
坐标类:Coordinate
数据成员:横坐标m_iX,纵坐标m_iY
成员函数:构造函数、析构函数、数据封装函数
线段类:Line、
数据成员:点A m_coorA,点B m_coorB
成员函数:构造函数、析构函数、数据封装函数、信息打印函数
*/
/****************************************/
int main(void)
{
Line *p = new Line(1,2,3,4);
p->pirntInfo();
delete p;
p = NULL;
system("pause");
return 0;
}
3-2、深浅拷贝实践
代码:
//Array3-2.h文件
class Array
{
public:
Array(int count);
Array(const Array &arr);
~Array();
void setCount(int count);
int getCount();
void printAddr();
void printArr();
private:
int m_iCount;
int *m_pArr;
};
//Array3-2.cpp文件
//3-2深浅拷贝实践
#include<iostream>
#include"Array3-2.h"
using namespace std;
Array::Array(int count)
{
m_iCount = count;
m_pArr = new int[m_iCount];
for(int i=0;i<m_iCount;i++)
{
m_pArr[i] = i;
}
cout<<"Array()"<<endl;
}
Array::Array(const Array &arr)
{
m_iCount = arr.m_iCount; //将arr对象中的m_iCount赋值给当前对象中的m_iCount
m_pArr = new int[m_iCount]; //申请一块内存
for(int i=0;i<m_iCount;i++)
{
m_pArr[i] = arr.m_pArr[i];
}
cout<<"Array(const Array &arr)"<<endl;
}
Array::~Array()
{
delete []m_pArr;
m_pArr = NULL;
cout<<"~Array()"<<endl;
}
void Array::setCount(int count)
{
m_iCount = count;
}
int Array::getCount()
{
return m_iCount;
}
void Array::printAddr()
{
cout<<"m_pArr的值是: "<<m_pArr<<endl;
}
void Array::printArr()
{
for(int i=0;i<m_iCount;i++)
{
cout<<m_pArr[i];
}
}
//3-2main函数文件
//3-2浅拷贝实践
#include<iostream>
#include<stdlib.h>
#include"Array3-2.h"
using namespace std;
/*********************************/
/*示例安排:
1.定义一个Array类,数据成员为m_iCount,
成员函数包含封装函数、构造函数、拷贝构造函数
和析构函数,通过此例体会浅拷贝原理
2.增加数据成员m_pArr,并增加m_pArr地址查看函数,同时改造
构造函数、拷贝构造函数和析构函数,体会深拷贝的原理和必要性
/*********************************/
int main(void)
{
Array arr1(6);
Array arr2(arr1);
// cout<<"arr2.m_iCount "<<arr2.getCount()<<endl;
arr1.printArr();
arr2.printArr();
system("pause");
return 0;
}
4-2、对象指针实践
//Coordinate.h文件
class Coordinate
{
public:
Coordinate();
~Coordinate();
public:
int m_iX;
int m_iY;
private:
};
//Coordinate.cpp文件
#include"Coordinate4_2.h"
#include<iostream>
using namespace std;
Coordinate::Coordinate()
{
cout<<"Coordinate"<<endl;
}
Coordinate::~Coordinate()
{
cout<<"~Coordinate"<<endl;
}
//4-2main函数文件
//C++远征之封装篇4-2C++对象指针实践
#include<iostream>
#include<stdlib.h>
#include"Coordinate4_2.h"
using namespace std;
/**************************************/
/*要求:
定义Coordinate类
数据成员:m_iX和m_iY
声明对象指针,并通过指针操控对象
计算两个点,横、纵坐标的和
/**************************************/
int main(void)
{
/*Coordinate *p1 = NULL;
p1 = new Coordinate;
Coordinate *p2 = new Coordinate();
p1->m_iX = 10;
p1->m_iY = 20;
(*p2).m_iX = 30; //(*p2)使指针变为一个对象
(*p2).m_iY = 40;
cout<<"p1->m_iX + (*p2).m_iX = "<<p1->m_iX+(*p2).m_iX<<endl;
cout<<"p1->m_iY + (*p2).m_iY = "<<p1->m_iY+(*p2).m_iY<<endl;
delete p1;
p1 = NULL;
delete p2;
p2 = NULL; */
Coordinate p1; //用栈实例化对象
Coordinate *p2 = &p1;
p2->m_iX = 10; //等价于(*p2).m_iX = 10;
p2->m_iY = 20; //等价于(*p2).m_iY = 20;
cout<<p1.m_iX<<endl;
cout<<p1.m_iY<<endl;
system("pause");
return 0;
}
4-5、对象成员指针实践
//Coordinate4_5.h文件
class Coordinate
{
public:
Coordinate(int x,int y);
~Coordinate();
int getX();
int getY();
private:
int m_iX;
int m_iY;
};
//Line4_5.h文件
#include"Coordinate4_5.h"
class Line
{
public:
Line(int x1,int y1,int x2,int y2);
~Line();
void printInfo();
private:
Coordinate *m_pCoorA;
Coordinate *m_pCoorB;
};
//Coordinate4_5.cpp文件
#include"Coordinate4_5.h"
#include<iostream>
using namespace std;
Coordinate::Coordinate(int x,int y)
{
m_iX = x;
m_iY = y;
cout<<"Coordinate() "<<m_iX<<","<<m_iY<<endl;
}
Coordinate::~Coordinate()
{
cout<<"~Coordinate()"<<m_iX<<","<<m_iY<<endl;
}
int Coordinate::getX()
{
return m_iX;
}
int Coordinate::getY()
{
return m_iY;
}
//Line4_5.cpp文件
#include"Line4_5.h"
#include<iostream>
using namespace std;
Line::Line(int x1,int y1,int x2,int y2)
{
m_pCoorA = new Coordinate(x1,y1);
m_pCoorB = new Coordinate(x2,y2); //堆中实例化
cout<<"Line()"<<endl;
}
Line::~Line()
{
delete m_pCoorA;
m_pCoorA = NULL;
delete m_pCoorB;
m_pCoorB = NULL;
cout<<"~Line()"<<endl;
}
void Line::printInfo()
{
cout<<"printInfo()"<<endl;
// cout<<"("<<m_pCoorA->m_iX<<","<<m_pCoorA->m_iY<<")"<<endl;//错误
// cout<<"("<<m_pCoorB->m_iX<<","<<m_pCoorb->m_iY<<")"<<endl;//错误
cout<<"("<<m_pCoorA->getX()<<","<<m_pCoorA->getY()<<")"<<endl;
cout<<"("<<m_pCoorB->getX()<<","<<m_pCoorB->getY()<<")"<<endl;
}
//4-5main文件
//4-5C++对象成员指针实践
#include<iostream>
#include<stdlib.h>
#include"Line4_5.h"
using namespace std;
/******************************/
/*
对象成员指针
要求:
定义两个类:
坐标类:Coordinate
数据成员:横坐标m_iX、纵坐标m_iY
成员函数:构造函数、析构函数、数据封装函数
线段类:Line
数据成员:点A指针m_pCoorA,点B指针m_pCoorB
成员函数:构造函数、析构函数、信息打印函数
/******************************/
int main(void)
{
Line *p = new Line(1,2,3,4);
p->printInfo();
delete p;
p = NULL;
cout<<sizeof(p)<<endl; //打印指针p所占用的内存大小
cout<<sizeof(Line)<<endl; //打印Line所占用的内存大小
system("pause");
return 0;
}
4-7、this指针实践
//Array4_7.h文件
class Array
{
public:
Array(int len);
~Array();
// void setLen(int len);
// Array& setLen(int len);
Array* setLen(int len);
int getLen();
// Array& printInfo();
Array* printInfo();
private:
// int m_iLen;
int len;
};
//Array4_7.cpp文件
#include"Array4_7.h"
#include<iostream>
using namespace std;
Array::Array(int len)
{
// m_iLen = len;
// cout<<"Array() "<<m_iLen<<endl;
//使用this指针
this->len = len;
// cout<<"Array() "<<this->len<<endl;
}
Array::~Array()
{
// cout<<"~Array()"<<endl;
}
//Array& Array::setLen(int len)
Array* Array::setLen(int len)
{
// m_iLen = len;
//使用this指针
this->len = len;
// return *this;
return this;
}
int Array::getLen()
{
return len;
}
//Array& Array::printInfo()
Array* Array::printInfo()
{
// cout<<"len = "<<len<<endl;
// return *this;
cout<<this<<endl; //打印this 的地址
return this;
}
//4-7main文件
//4-7this指针实践(1)
#include"Array4_7.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
/*********************************/
/*示例要求:
定义一个Array类
数据成员:m_iLen表示数组长度
成员函数:
构造函数
析构函数
len的封装函数
信息输出函数printInfo
/*********************************/
int main(void)
{
Array arr1(6);
// arr1.printInfo().setLen(10).printInfo();
// arr1.printInfo()->setLen(10)->printInfo();
// cout<<arr1.getLen()<<endl;
arr1.printInfo();
cout<<&arr1<<endl; //打印arr1的地址
system("pause");
return 0;
}
5-2、常对象成员和常成员函数实践
//Coordinate5_2.h文件
class Coordinate
{
public:
Coordinate(int x,int y);
~Coordinate();
void setX(int x);
int getX() const;
void setY(int y);
int getY() const;
private:
int m_iX;
int m_iY;
};
//Line5_2.h文件
#include"Coordinate5_2.h"
class Line
{
public:
Line(int x1,int y1,int x2,int y2);
~Line();
void setA(int x,int y);
void setB(int x,int y);
void printInfo();
void printInfo() const;
private:
const Coordinate m_coorA;
Coordinate m_coorB;
};
//Coordinate5_2.cpp文件
#include"Coordinate5_2.h"
#include<iostream>
using namespace std;
Coordinate::Coordinate(int x,int y)
{
m_iX = x;
m_iY = y;
cout<<"Coordinate()"<<endl;
}
Coordinate::~Coordinate()
{
cout<<"~Coordinate()"<<endl;
}
void Coordinate::setX(int x)
{
m_iX = x;
}
int Coordinate::getX() const
{
return m_iX;
}
void Coordinate::setY(int y)
{
m_iY = y;
}
int Coordinate::getY() const
{
return m_iY;
}
//Line5_2.cpp文件
#include"Line5_2.h"
#include<iostream>
using namespace std;
Line::Line(int x1,int y1,int x2,int y2):m_coorA(x1,y1),m_coorB(x2,y2)
{
cout<<"Line()"<<endl;
}
Line::~Line()
{
cout<<"~Line()"<<endl;
}
void Line::setA(int x,int y)
{
// m_coorA.setX(x);
// m_coorA.setY(y);
}
void Line::setB(int x,int y)
{
m_coorB.setX(x);
m_coorB.setY(y);
}
void Line::printInfo()
{
cout<<"printInfo()"<<endl;
cout<<"("<<m_coorA.getX()<<","<<m_coorA.getY()<<")"<<endl;
cout<<"("<<m_coorB.getX()<<","<<m_coorB.getY()<<")"<<endl;
}
void Line::printInfo() const
{
cout<<"printInfo() const"<<endl;
cout<<"("<<m_coorA.getX()<<","<<m_coorA.getY()<<")"<<endl;
cout<<"("<<m_coorB.getX()<<","<<m_coorB.getY()<<")"<<endl;
}
//5-2main文件
//5-2常对象成员和常成员函数实践
#include<iostream>
#include<stdlib.h>
#include"Line5_2.h"
using namespace std;
/*************************************/
/* 常对象成员、常函数、常对象
要求:
定义两个类:
坐标类:Coordinate
数据成员:横坐标m_iX,纵坐标m_iY
成员函数:构造函数、析构函数、数据封装函数
线段类:Line
数据成员:点A m_coorA,点B m_coorB
成员函数:构造函数、析构函数、数据封装函数、信息打印函数
/*************************************/
int main(void)
{
// const Line line(1,2,3,4);
// line.printInfo();
Line line(1,2,3,4);
line.printInfo();
system("pause");
return 0;
}