-
自己写了代码和博客。欢迎查看。
地址:https://blog.csdn.net/basic_wheels96/article/details/108197956
查看全部 -
当在对象成员指针中用sizeof时只能打印出指针所占的内存单元,而不是指针指向对象的内存单元。
对象成员:对象成为另一个类的数据成员。
对象成员指针:对象的指针成为另一个类的数据成员。
.对象成员指针的定义: 类名 * 指针名 是指针而不是对象
销毁 Line 的时候,先销毁队中的内存,在释放 Line 本身的内存
查看全部 -
Coordinate p1;//从栈中实例化一个对象
Coordinate *p2 = &p1;//让p2指向p1,运用了取地址的符号。就可以用p2来操作p1的数据成员和成员函数了
*******************************************************************
Coordinate *p1 = NULL;//第一个点,指向NULL
p1 = new Coordinate;//因为Coordinate是一个默认的构造函数所以可以没有参数
Coordinate *p2 = new Coordinate(); //两种不同的赋值方法
查看全部 -
CRTL+K+C:注释快捷键
CTRL+K+U:取消注释快捷键
查看全部 -
对象指针:类名 * 指针名 = new 类名
查看全部 -
什么时候用到拷贝函数?
a.一个对象以值传递的方式传入函数体;
b.一个对象以值传递的方式从函数返回;
c.一个对象需要通过另外一个对象进行初始化。深拷贝即是先申请一段内存,再在这段内存里进行复制操作把上一个对象数组的成员全部拷贝过来;
浅拷贝则直接把指针的地址复制给一个对象数组的第一个成员。
查看全部 -
浅拷贝:将值拷贝过去且与构造函数同名 参数为(const 构造函数名& 实例化名字) {成员变量 = 实例化名字.成员变量}
查看全部 -
浅拷贝:
将对象内容简单拷贝,指针成员指向同一地址
深拷贝:
在堆中开辟一块新的地址,将原地址中的内容拷贝进去
如果数据成员里面不包含指针的话用浅拷贝即可<br>
如果数据成员里面包含指针的话,那就需要用到深拷贝,即为该指针在堆上开辟一块内存,并且将另外一个对象的数据全部赋给这个对象的数据成员查看全部 -
对象成员需要外层对象传参进行构造时必须采用初始化列表的方式
先构造成员->再构造自己;
先析构自己->再析构成员初始化的顺序: 与 初始化列表顺序无关;
与类中定义时的先后顺序有关;
-构造时: 从上往下
-析构时: 从下往上.
查看全部 -
Line.cpp #include"Line.h" #include<iostream> using namespace std; Line::Line(){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;}
查看全部 -
当对象(用一个类描述)作为数据成员时:
先实例化对象成员,再实例化对象
销毁时与创建过程相反
查看全部 -
delete []p; p = NULL;
加上[]能销毁所有的元素,如果不加只销毁第一个元素
其实就是调用了p中的析构函数
查看全部 -
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=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; 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;}
查看全部 -
p[0]指向第一个元素;执行p++之后p[0]指向第2个!
释放内存时要注意指针 p 指回原来的位置。用delete释放数组内存时要注意此时的指针*p要指到该数组的第一个元素上。保证申请和释放的是同一段内存
第二个循环第一次打印的是第三个元素因为指针经过p++到第三个元素了,所以得用p--
注意:在对象数组中,想要访问某个堆中的对象的成员属性时
p->m_ix=1;p[0].m_ix=1
效果是一样的,但是p[0]->m_ix=1这种用法是错误、以及注意 p++后 p[0] 前后的指向是不一样的。数组的头指针最好要保留,采用(p+1)->m_iX的方式访问,不会更改头指针
查看全部 -
对象数组:
栈中实例化一个对象数组:Coordinate coord[3];
堆中实例化一个对象数组 :Coordinate *p=new Coordinate[3];查看全部
举报