c++慕课网3
来源:互联网 发布:东莞农村商业银行网络 编辑:程序博客网 时间:2024/05/29 02:30
深拷贝浅拷贝
第一问:
Array.h
class Array{public: Array(); Array(const Array&arr); ~Array(); void setCount(int count); int getCount();private: int m_iCount;};
Array.cpp
#include<iostream>#include"Array.h"using namespace std;Array::Array(){ cout << "Array" << endl;}Array::Array(const Array &arr){ m_iCount = arr.m_iCount; cout << "Array&" << endl;}Array::~Array(){ cout << "~Array" << endl;}void Array::setCount(int count){ m_iCount = count;}int Array::getCount(){ return m_iCount;}
demo.cpp
#include<iostream>#include<stdlib.h>#include"Array.h"using namespace std;int main(void){ Array arr1; arr1.setCount(5); Array arr2(arr1); cout << "arr2.m_iCount"<<arr2.getCount() << endl; system("pause"); return 0;}
第二问:
Array.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;};
Array.cpp
#include<iostream>#include"Array.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; m_pArr = new int[m_iCount]; for (int i = 0; i < m_iCount; i++) { m_pArr[i] = arr.m_pArr[i]; } cout << "Array&" << endl;}Array::~Array(){ delete[]m_pArr;//arr1,arr2各删除一遍 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]<<endl; }}
demo.cpp
#include<iostream>#include<stdlib.h>#include"Array.h"using namespace std;int main(void){ Array arr1(5); Array arr2(arr1); arr1.printArr(); arr1.printArr(); system("pause"); return 0;}
对象指针
Coordinate.h
class Coordinate{public: Coordinate(); ~Coordinate();public: int m_iX; int m_iY;};
Coordinate.cpp
#include<iostream>#include"Coordinate.h"using namespace std;Coordinate::Coordinate(){ cout << "Coordinate" << endl;}Coordinate::~Coordinate(){ cout << "~Coordinate" << endl;}
demo.cpp
#include<iostream>#include<stdlib.h>#include"Coordinate.h"using namespace std;int main(void){ //堆中: Coordinate *p1 = NULL;//定义一个对象指针,指向NULL p1 = new Coordinate; Coordinate *p2 = new Coordinate;//Coordiante的后面加不加()都是对的 p1->m_iX = 10; p1->m_iY = 20; (*p2).m_iX = 30; (*p2).m_iY = 40; cout << p1->m_iX + (*p2).m_iX << endl; cout << p1->m_iY + (*p2).m_iY << endl; delete p1; p1 = NULL; delete p2; p2 = NULL; //栈中: // Coordinate p1; //Coordinate *p2 = &p1;//让P2来指向P1 //p2->m_iX = 10; //P2->m_iY = 20; //cout << p1.m_iX << endl; //cout << p1.m_iY << endl; //结果是10,20,通过p2可以操作p1 system("pause"); return 0;}
对象成员指针
demo.cpp
#include<iostream>#include<stdlib.h>#include"Line.h"using namespace std;int main(void){ Line *p=new Line(1,2,3,4); p->printInfo();//将两个坐标打印出来 delete p; p =NULL; cout<<sizeof(p)<<endl; cout<<sizeof(Line)<<endl; system("pause"); return 0;}
Coordinate.h
class Coordinate{public: Coordinate(int x,int y); ~Coordiante(); int getX(); int getY();private: int m_iX; int m_iY;//两个数据成员,横坐标纵坐标};
Coordinate.cpp
#include<iostream>#include"Coordiate.h"using namespace std;Coordinate::Coordiante(int x,int y){ m_iX=x; m_iY=y; cout<<"Coordiante()"<<m_iX<<","<<m_iY<<endl;}Coordiante::~Coordiante(){ cout<<"~Coordinate()"<<m_iX<<","<<m_iY<<endl;}int Coordiante::getX(){ return m_iX;}int Coordiante::getY(){ return m_iY;}
Line.h
#include "Coordinate.h"class Line{public: Line(int x1,int y1,int x2,int y2); ~Line(); void printInfo();private: Coordiante *m_pCoorA; Coordiante *m_pCoorB;};
Line.cpp
#include<iostream>#include"Line.h"using namespace std;Line::Line(int x1,int y1,int x2,int y2){ m_pCoorA=new Coordianate(x1,y1); m_pCoorB=new Coordiante(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->getX()<<","<<m_pCoorA->getY()<<")"<<endl; cout<<"("<<m_pCoorB->getX()<<","<<m_pCoorB->getY()<<")"<<endl;}
this指针
Array.h
class Array{public: Array(int len); ~Array(); void setLen(int len); int getLen(); void printInfo();private: int len;//m_iLen;};
Array.cpp
#include<iostream>#include"Array.h"using namespace std;Array::Array(int len){ this->len = len;//m_iLen = len;}Array::~Array(){}void Array::setLen(int len){ this->len = len;//m_iLen = len;}int Array::getLen()//来获取len的值,把他打印出来{ return len;//return m_iLen;}void Array::printInfo(){}
demo.cpp
#include<iostream>#include<stdlib.h>#include "Array.h"using namespace std;int main(void){ Array arr1(10);//会赋值给数据成员m_Len=10 cout << arr1.getLen() << endl; system("pause"); return 0;}
更改程序,利用引用&
demo.cpp
#include<iostream>#include<stdlib.h>#include "Array.h"using namespace std;int main(void){ Array arr1(10);//会赋值给数据成员m_Len=10 arr1.printInfo().setLen(5).printInfo();//arr1.printInfo();这条语句打印出来的是10,现在改变加上set.len(5),结果未发生改变len=10(两遍) //printInfo()的返回值return *this出来之后变成了另外一个对象,这个对象是一个临时的对象,并不arr1;将Array ArrayprintInfo()加上引用& //第一个printInfo调用10,第二个printInfo调用5,都是针对arr1的操作 system("pause"); return 0;}
Array.h
#pragma onceclass Array{public: Array(int len); ~Array(); Array & setLen(int len); int getLen(); Array& printInfo();//Array printInfo();加上引用 //void printInfo();private: int len;//m_iLen;};
Array.cpp
#include<iostream>#include"Array.h"using namespace std;Array::Array(int len){ this->len = len;//m_iLen = len;}Array::~Array(){}Array&Array::setLen(int len)//void Array::setLen(int len){ this->len = len;//m_iLen = len; return *this;//别忘了}int Array::getLen()//来获取len的值,把他打印出来{ return len;//return m_iLen;}Array&Array::printInfo()//Array Array ::printInfo()加上引用//void Array::printInfo(){ cout << "len=" << len << endl; return *this;//指针变对象;要求的返回值为Array}
更改程序,利用指针*;无论通过指针还是引用都可以改变参数的值
demo.cpp
#include<iostream>#include<stdlib.h>#include "Array.h"using namespace std;int main(void){ Array arr1(10);//会赋值给数据成员m_Len=10 arr1.printInfo();//this指针打印的地址值 cout << &arr1 << endl;//看看值是否相同,结果相同 //arr1.printInfo()->setLen(5)->printInfo();//变为指针符号同样可以输出 system("pause"); return 0;}
Array.h
class Array{public: Array(int len); ~Array(); Array * setLen(int len); int getLen(); Array*printInfo();private: int len;//m_iLen;};
Array.cpp
#include<iostream>#include"Array.h"using namespace std;Array::Array(int len){ this->len = len;//m_iLen = len;}Array::~Array(){}Array*Array::setLen(int len)//void Array::setLen(int len){ this->len = len;//m_iLen = len; return this;//别忘了}int Array::getLen()//来获取len的值,把他打印出来{ return len;//return m_iLen;}Array*Array::printInfo()//Array Array ::printInfo()加上引用//void Array::printInfo(){ cout << this<< endl;//打印this指针的地址,说明this指针本质上就代表对象本身的地址 return this;//不需加*,返回对象}
结果:
走出迷宫
这里写图片描述
阅读全文
0 0
- C实现C(3)
- C++(3)
- C.3
- C(3)
- C#(3)
- c++(3)
- 【Deep C (and C++)】深入理解C/C++(3)
- 【Deep C (and C++)】深入理解C/C++(3)
- 【Deep C (and C++)】深入理解C/C++(3)
- 3C融合(3c fusion)
- 高质量C++/C编程指南[3]
- 【C++进阶】深入理解C/C++(3)
- C进修(3)--C的一些基础知识
- c语言基础(3)--数据和c
- C语言程序设计 第一章C语言概述.3
- [C/C++] 算法提高 5-3日历
- C 语言入门 慕课网
- C 语言入门 慕课网
- PHP对redis操作详解【转】
- ngx自定义一个判断是否点击本节点的指令
- 汇编dos功能调用
- vijos第k优背包
- python 递归深度
- c++慕课网3
- linux 的 inode
- python3.6.3+opencv3.3.0学习笔记五--动态人脸捕获
- PortAudio+webrtc+lame实现采集降噪增益mp3
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)错误解
- 使用Tomcat发布一个WEB项目(web,tomcat概述)
- 使用预处理器进行调试
- [LeetCode]38. Count and Say
- 集合扩展方法、委托的运算、事件