对象数组:
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; }
对象成员:

/* * 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; }
浅拷贝:

/* * 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; }
Array
Array&
arr2.m_iCount:5
~Array
~Array
深拷贝:

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; }
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; }
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; }

/* * 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; }
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具有读写权限