-
我们设置了类,但是设置许多实例化的对象通过构造函数,拷贝构造函数实现数据与数据成员的赋值,旧的对象与新的对象之间的联系,多个对象可以调用同一个类中的成员函数,其放置在代码区并不受影响,对于我们来说,我们关心成员函数的输出,申请一个新对象既是开辟一个新的内存单元存储数据成员以使对象之间区别出来。 这些基础上穿插了对象数组,对象成员,对象成员指针,研究的其实还是不同的数据成员与成员函数之间的新关系。课里为我们演示了构造函数,拷贝构造函数,析构函数的使用原理,也讲述了栈和堆的不同,希望自己能分清楚。 this指针一般都是系统默认调用,以防止在实例化对象调用成员函数的时候出现错误,保证一一对应,当数据成员和构造函数中的形参名字相同是,计算机会分不清楚谁给谁赋值,这是需要人工加上this指针,用来区别查看全部
-
一个对象的多个成员就可看作是这个对象所拥有的书;而在很多个对象中间,我们为了证明某个成员是自己的成员,而不是其他对象的成员,我们同样需要给这些成员取上名字。我们利用this指针帮助对象做到这一点,this指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员。 this指针最大的作用就是它保存了当前对象的地址,并且应用指针的形式指向了当前的对象。查看全部
-
ctrl+k+C查看全部
-
1.一个对象作为另一个对象的数据成员,称为“对象成员” 2.对象成员的创建次序: 先创建成员对象,再创建包含着成员对象的对象。(先里后外) 3.对象成员的销毁次序: 先销毁包含了成员对象的对象,再销毁成员对象。(先外后里) 当没有自己定义的时候,系统都会自动生成。但是系统生成的构造函数和析构函数是空函数,没有实际作用。定义构造函数可以发给类成员设置默认值等等,同样的,如果我们的类数据成员包含了从堆中申请的内存,类的析构函数就应当加入包含释放堆中内存的语句。或者我们需要程序在对象解散时在屏幕上输出提示信息,也可以在类的析构函数中加入提示信息。查看全部
-
看图。 实例化 Line 的时候,先调用 Coordinate 构造函数,再调用 Line 构造函数,销毁的时候,先销毁堆中的对象即 Coordinate 对象,再销毁 Line 对象。跟对象成员有区别,对象成员会先销毁 Line 对象,再销毁内层的 Coordinate 对象。 对象成员指针的创建次序: 先创建成员对象,再创建包含着成员对象指针的对象。(先里后外) 对象成员的销毁次序: 先销毁成员对象,再销毁包含了成员对象指针的对象,再(先里后外)查看全部
-
c对象成员和对象成员指针所占的字节数程序测试代码: #include <iostream> using namespace std; class A { private : int arr[5]; }; class B { private : A obj1; A obj2; }; class C { private : A *pA1; A *pA2; }; int main() { cout << "一个int占的字节数:" << sizeof(int) << endl; cout << "一个指针占的字节数:" << sizeof(A *) << endl; cout << "一个A类的实例占的字节数:" << sizeof(A) << endl; cout << "一个带有两个A类成员的B类的实例占的字节数:" << sizeof(B) << endl; cout << "一个带有两个指向A类实例的指针成员的C类实例占的字节数:" << sizeof(C) << endl; return 0; }查看全部
-
(1)32位的编译环境,一个指针占4个字节,1一个字节就是一个基本的内存单元,1Byte = 8 bit,即一个内存单元里可以存储2的8次方不同情况的高低电平。<br> (2)因为Line这个类中有,两个对象成员指针,所以占了8个字节。<br> (3)sizeof()函数返回的是整数,单位为“字节”. (4)64位的是32位的两倍查看全部
-
拷贝构造函数,Array(const Array& arr){}查看全部
-
对象成员是一个类的对象成为了另外一个类的数据成员。<br> 对象成员指针是对象的指针作为了另外一个类的数据成员了。 line中有两个指针,每个指针占4位,而指针指向m_iX 和m_iY,m_iX 和m_iY共占8位,sizeof(line)计算的是指针的所占大小查看全部
-
含有对象成员的类的构造函数查看全部
-
此时不能直接用delete []p;来释放内存,要加p++让它指回循环之前的位置 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; delete时没有[]将只会清除第一个元素的内存 会造成内存泄露 如果是堆中开辟了对象数组,delete p 则销毁的是第一个元素, delete []p 则会销毁一个对象数组查看全部
-
如果数据成员是private,在类外就要通过类定义的函数去访问 / 在堆上创建对象指针 Coordinate *p=new Coordinate(3,5);查看全部
-
class Corrdinate { public: Corrdinate(); ~Corrdinate(); public: int m_iX; int m_iY; }; #include "Coordinate.h" #include <iostream> using namespace std; Corrdinate::Corrdinate() { cout << "Coordinate" <<endl; } Corrdinate::~Corrdinate() { cout << "~Corrdinate" <<endl; } #include <iostream> #include <stdlib.h> #include "Coordinate.h" using namespace std; int main(void) { //Corrdinate *p1 = NULL; //p1 = new Corrdinate; //Corrdinate *p2 = new Corrdinate(); //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; Corrdinate p1; Corrdinate *p2 = &p1; p2->m_iX = 10;//(*p2).m_iX = 10; p2->m_iY = 20;//(*p2).m_iY = 20; cout <<p1.m_iX <<endl; cout <<p1.m_iY <<endl; system("pause"); return 0; }查看全部
-
同样的访问限定符(如public)可以出现多次。用指针新建对象的时候,如果是默认的构造函数,后面的括号可以写可不写。 将*p括起来就变成了一个对象(*p),访问的时候就可以以对象的方式 . 访问数据成员了。 p1->和(*p1)是一样使用的 对象指针往往会指向一段内存,如果内存是用new从堆中申请来的,使用结束之后一定要用delete归还给系统,否则会内存泄漏。 快捷键 注释:先选定内容,然后Ctrl+K+C查看全部
-
访问指针对象中的成员变量的两种方式: object *o; o -> property; (*o).property; 而且默认o指向了对象o的第一个属性/成员变量 访问指针对象中的成员变量的两种方式: 另外,c++ 的开辟空间命令new 和 c语言的malloc有着本质区别. new不但会开辟内存,还会调用对的的构造函数; 但是 malloc不会调用构造函数,只会单纯的开辟空间查看全部
举报
0/150
提交
取消