-
Coordinate 没有与指定类型匹配的重载函数查看全部
-
成员函数如何访问到正确的数据成员,主要是因为成员函数参数中默认有一个this指针查看全部
-
1、this指针无需用户定义,是编译器自动产生的。 2、同一个类的两个对象的this指针指向不同位置的内存:对象各自的this指针指向各自对象的首地址,所以不同对象的this指针一定指向不同的内存地址 3、当成员函数的参数或临时变量与数据成员同名时,可以使用this指针区分同名的数据成员。 4、this指针也是指针类型,所以在32位编译器下也占用4个基本的内存单元,即sizeof(this)的结果为4。查看全部
-
Array printInfo();要求返回值类型是一个对象,而Array Array::printInfo(){return *this}的返回值就是一个对象。 this指针系统会自己加 Array Array::printInfo(){return *this;}返回出去之后的*this指针是一个临时的对象,并不是arr1 Array& Array::printInfo(){return *this;}这样返回出去的就是arr1了。 加入引用之后,一切都清晰起来了 使用点号可以将多个方法穿起来使用 如果用的是&,返回值要加*,即为*this,使用函数是用点号 如果用的是*,即为指针,返回值不用加* ,即为this,使用函数是用-> 1.可用this指针做返回 2.*this对象做返回与引用Array &配合 都可对原对象做操作查看全部
-
住:我们设置了类,但是设置许多实例化的对象通过构造函数,拷贝构造函数实现数据与数据成员的赋值,旧的对象与新的对象之间的联系,多个对象可以调用同一个类中的成员函数,其放置在代码区并不受影响,对于我们来说,我们关心成员函数的输出,申请一个新对象既是开辟一个新的内存单元存储数据成员以使对象之间区别出来。 这些基础上穿插了对象数组,对象成员,对象成员指针,研究的其实还是不同的数据成员与成员函数之间的新关系。课里为我们演示了构造函数,拷贝构造函数,析构函数的使用原理,也讲述了栈和堆的不同,希望自己能分清楚。 this指针一般都是系统默认调用,以防止在实例化对象调用成员函数的时候出现错误,保证一一对应,当数据成员和构造函数中的形参名字相同是,计算机会分不清楚谁给谁赋值,这是需要人工加上this指针,用来区别查看全部
-
数据成员和参数的在表达同一个意思的时候用的不同的名字 参数与数据成员重名会怎么样:当然是报错了 标记参数或者标记数据成员的技术,就是this指针的用处 this指针就是指向对象自身数据的指针 this指针表达什么意思,要看放在什么位子,写在谁的里面就是谁的地址,比如写在arr1中,this指针就是arr1的地址 通过this指针可以访问到它表达的对象的自身的任何数组 this指针的好处是可以标记自身的数据成员 如果想用和数据成员重名的参数,在数据成员前面加this->就可以 对象可以有多个,然后可以去调用成员函数,代码区只有一个,对象都是从代码区调用的,没有出现混乱就是因为this指针 每个成员函数都有this指针,系统加的查看全部
-
对象成员和对象成员指针所占的字节数程序测试代码: #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; }查看全部
-
对象成员是一个类的对象成为了另外一个类的数据成员。<br> 对象成员指针是对象的指针作为了另外一个类的数据成员了。 line中有两个指针,每个指针占4位,而指针指向m_iX 和m_iY,m_iX 和m_iY共占8位,sizeof(line)计算的是指针的所占大小查看全部
-
如果不用初始化列表会怎么样?查看全部
-
如果数据成员是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; }查看全部
-
同样的访问限定符可以出现多次。用指针新建对象的时候,如果是默认的构造函数,后面的括号可以不写。 将*p括起来就变成了一个对象(*p),访问的时候就可以以对象的方式访问数据成员了。 p1->和(*p1)是一样使用的 对象指针往往会指向一段内存,如果内存时从堆中申请来的,使用结束之后一定要归还给系统,否则会内存泄漏。 快捷键 注释:Ctrl+K+C查看全部
-
访问指针对象中的成员变量的两种方式: object *o; o -> property; (*o).property; 而且默认o指向了对象o的第一个属性/成员变量 访问指针对象中的成员变量的两种方式: 另外,c++ 的开辟空间命令new 和 c语言的malloc有着本质区别. new不但会开辟内存,还会调用对的的构造函数; 但是 malloc不会调用构造函数,只会单纯的开辟空间查看全部
-
当数据成员中含有指针时,浅拷贝会使两个对象的成员指针指向相同的内存地址 深拷贝不是简单的值拷贝,而是将指针成员指向的内存数据也进行拷贝。 不是所有的对象都需要深拷贝,应该根据情况合理使用。查看全部
-
实例化一个对象时调用拷贝函数,完成对象到对象的拷贝时调用拷贝构造函数如Array arr2(arr1)。当数据成员中含有指针时,进行深拷贝或浅拷贝。深拷贝在这两个过程中申请内存两次,这样对象到对象的赋值拷贝是两个不同的内存块之间的操作,所以释放时不会出现问题,在调用拷贝构造函数时搞清楚Array(const Array &arr)引用的是哪一个对象,也就是要拷贝哪一个,拷贝那些数据成员,这与构造函数完成的任务差别很大,希望自己不要弄混了。查看全部
举报
0/150
提交
取消