C++初步 2

对象数组:

     Coordinate coord[3];  栈区           Coordinate *p=new Coordinate[3];    堆区     

/*
 * Coordinate.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */

class Coordinate
{
public:
    Coordinate();
    ~Coordinate();
public:
    int m_iX;
    int m_iY;
};

/*
 * Coordinate.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Coordinate.h"
#include<iostream>
using namespace std;

Coordinate::Coordinate()
{
    cout<<"Coordinate"<<endl;
}
Coordinate::~Coordinate()
{
    cout<<"~Coordinate"<<endl;
}

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

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++; //第二个元素
   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[i].m_iX<<endl;
       cout<<coor[i].m_iY<<endl;
   }
   for(int j=0;j<3;j++)
   {
       cout<<p->m_iX<<endl;
       cout<<p->m_iY<<endl;
       p--;
   }

   p++;
   delete []p;
   p=NULL;

   return 0;
}
View Code

对象成员:

/*
 * Coordinate.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
class Coordinate
{
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;
};
/*
 * Line.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Coordinate.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();
private:
    Coordinate m_coorA;
    Coordinate m_coorB;
};
/*
 * Coordinate.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Coordinate.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;
}
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;
}
/*
 * Line.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include<iostream>
#include"Line.h"
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<<"("<<m_coorA.getX()<<","<<m_coorA.getY()<<")"<<endl;
    cout<<"("<<m_coorB.getX()<<","<<m_coorB.getY()<<")"<<endl;
}

#include <iostream>
#include <string>

#include "Line.h"
using namespace std;

int main(void)
{
    Line *p=new Line(1,2,3,4);
    p->printInfo();
    delete p;
    p=NULL;
   return 0;
}
View Code

浅拷贝:

/*
 * Array.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */

#ifndef ARRAY_H_
#define ARRAY_H_
class Array
{
public:
    Array();
    Array(const Array &arr);
    ~Array();
    void setCount(int count);
    int getCount();
private:
    int m_iCount;
};

#endif /* ARRAY_H_ */

/*
 * Array.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Array.h"
#include<iostream>
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;
}

#include <iostream>
#include <string>

#include "Array.h"
using namespace std;

int main(void)
{
   Array arr1;
   arr1.setCount(5);

   Array arr2(arr1);
   cout<<"arr2.m_iCount:"<<arr2.getCount()<<endl;
   return 0;
}
View Code
 

Array

Array&

arr2.m_iCount:5

~Array

~Array

深拷贝:

View Code

Array

Array &

0

1

2

3

4

0

1

2

3

4

~Array

~Array

 

对象指针:

/*
 * Coordinate.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */

class Coordinate
{
public:
    Coordinate();
    ~Coordinate();
public:
    int m_iX;
    int m_iY;
};

/*
 * Coordinate.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Coordinate.h"
#include<iostream>
using namespace std;
Coordinate::Coordinate()
{
    cout<<"Coordinate"<<endl;
}
Coordinate::~Coordinate()
{
    cout<<"~Coordinate"<<endl;
}

/*
 * demo.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include<iostream>
#include<stdlib.h>
#include"Coordinate.h"
using namespace std;
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).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;
    return 0;
}
View Code

Coordinate

Coordinate

40

60

~Coordinate

~Coordinate

 

对象成员指针:

 

/*
 * Coordinate.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */

class Coordinate
{
public:
    Coordinate(int x,int y);
    ~Coordinate();
    int getX();
    int getY();
public:
    int m_iX;
    int m_iY;
};
/*
 * Coordinate.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Coordinate.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;
}
/*
 * Line.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Coordinate.h"
class Line
{
public:
    Line(int x1,int y1,int x2,int y2);
    ~Line();
    void printInfo();
private:
    Coordinate *m_pCoorA;
    Coordinate *m_pCoorB;
};
/*
 * Line.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include<iostream>
#include"Line.h"
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->getX()<<","<<m_pCoorA->getY()<<")"<<endl;
    cout<<"("<<m_pCoorB->getX()<<","<<m_pCoorB->getY()<<")"<<endl;
}
/*
 * demo.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#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;
    return 0;
}
View Code

printInfo()

(1,2)

(3,4)

~Coordinate1,2

~Coordinate3,4

~Line()

8

16  //(64位结果,32位减半)

 

this指针: 

/*
 * Array.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */

class Array
{
public:
    Array(int len);
    ~Array();
    void setLen(int len);
    int getLen();
    void printInfo();
private:
    int len;
};
/*
 * Array.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Array.h"
#include<iostream>
using namespace std;
Array::Array(int len)
{
    this->len=len;
}
Array::~Array()
{

}
void Array::setLen(int len)
{
    this->len=len;
}
int Array::getLen()
{
    return len;
}
void Array::printInfo()
{

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

int main(void)
{
   Array arr1(10);
    cout<<arr1.getLen()<<endl;
   return 0;
}
View Code
/*
 * Array.h
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */

class Array
{
public:
    Array(int len);
    ~Array();
    Array& setLen(int len);
    int getLen();
    Array& printInfo();
private:
    int len;
};
/*
 * Array.cpp
 *
 *  Created on: 2017年7月13日
 *      Author: rmbp
 */
#include"Array.h"
#include<iostream>
using namespace std;
Array::Array(int len)
{
    this->len=len;
}
Array::~Array()
{

}
Array& Array::setLen(int len)
{
    this->len=len;
    return *this;
}
int Array::getLen()
{
    return len;
}
Array& Array::printInfo()
{
    cout<<"len="<<len<<endl;
    return *this;
}
#include <iostream>
#include <string>
#include "Array.h"
using namespace std;

int main(void)
{
   Array arr1(10);
   arr1.printInfo().setLen(5).printInfo();
   return 0;
}
View Code

len=10

len=5

常对象成员和常成员函数:

       常成员函数中不能修改数据成员的值。  func() const{}

常指针和常引用:

       Coordinate coor1(3,5);

       const Coordinate &coor2=coor1;  只能调用常函数

       const Coordinate *pCoor=&coor1;

     ------------

       Coordinate coor1(3,5);

       Coordinate coor2(7,9);

       Coordinate *const pCoor=&coor1;   //pCoor具有读写权限

 

 

原文地址:https://www.cnblogs.com/zf723/p/7161454.html