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;//不需加*,返回对象}

结果:
这里写图片描述
这里写图片描述

走出迷宫
这里写图片描述
这里写图片描述

原创粉丝点击