-
Coordinate coor1(1,2); const Coordinate &coor2=coor1;//常引用 const Coordinate *pCoor=&coor1;//常指针pCoor指向的coor1的内容不可变,指针具只有读权限 coor1.printInfo();//正确,printInfo()为常成员函数 coor2.getX();//错误,getX()必须为常成员函数 pCoor->getY();//错误,getY()必须为常成员函数 Coordinate coor1(1,2); Coordinate coor2(3,4); Coordinate *const pCoor=&coor1;//常指针pCoor指向的对象coor1不可变,指针具有读写权限 pCoor->getY();//正确,常指针pCoor指向的coor1的内容可变 pCoor->coor2;//错误,常指针pCoor不能再指向coor1以外的对象 pCoor->printInfo();//正确查看全部
-
1.常成员函数的本质是内部使用常this指针。 2.常成员函数内使用数据成员时,不能改变数据成员的值。 3.常成员函数内不能调用普通的成员函数。 4.常成员函数中可以使用普通的数据成员,但是不能改变对象成员的值查看全部
-
用法五(指针): class Array { public: Array(int len){this->len=len;} ~Array(){} Array* setLen(int len) {this->len=len; return this; }//返回指针 int getLen(){return len;} Array* printInfo() {cout<<"len="<<len<<endl; return this; }//返回指针 private: int len; }; int main(void) { Array arr1(10); arr1.printInfo()->setLen(5)->printInfo();//指针操作 system("pause"); return 0; } /*输出结果*/ len=10 len=5查看全部
-
用法三(引用): class Array { public: Array(int len){this->len=len;} ~Array(){} void setLen(int len){this->len=len;} int getLen(){return len;} Array& printInfo() {cout<<"len="<<len<<endl; return *this; }//Array& 对象的引用,使其可以对同一对象操作 private: int len; }; int main(void) { Array arr1(10); arr1.printInfo().setLen(5); cout<<"arr1.len="<<arr1.getLen()<<endl; system("pause"); return 0; } /*输出结果*/ len=10 arr1.len=5 用法四(引用): class Array { public: Array(int len){this->len=len;} ~Array(){} Array& setLen(int len) {this->len=len; return *this; }//对同一对象set int getLen(){return len;} Array& printInfo() {cout<<"len="<<len<<endl; return *this; } private: int len; }; int main(void) { Array arr1(10); arr1.printInfo().setLen(5).printInfo();//打印arr1,修改arr1,再打印arr1 system("pause"); return 0; } /*输出结果*/ len=10 len=5查看全部
-
用法一: class Array { public: Array(int len){this->len=len;} ~Array(){} void setLen(int len){this->len=len;} int getLen(){return len;} void printInfo(){ } private: int len; }; int main(void) { Array arr1(10); cout<<arr1.getLen()<<endl; system("pause"); return 0; } /*输出结果*/ 10 用法二: class Array { public: Array(int len){this->len=len;} ~Array(){} void setLen(int len){this->len=len;} int getLen(){return len;} Array printInfo() {cout<<"len="<<len<<endl; return *this; }//this的值是对象本身地址,*this是当前对象本身 private: int len; }; int main(void) { Array arr1(10); arr1.printInfo().setLen(5);//修改*this所对应一个临时对象的值,不改变arr1的值 cout<<"arr1.len="<<arr1.getLen()<<endl; system("pause"); return 0; } /*输出结果*/ len=10 arr1.len=10查看全部
-
对象的拷贝 浅拷贝:只是将数据成员的值进行了简单拷贝,有指针时仅拷贝指针地址,结果只是增加了一个指针指向已经存在的内存。 class Array { public: Array(){m_iCount=5;m_pArr=new int[m_iCount];} Array(const Array& arr) {m_iCount=arr.m_iCount; m_pArr=arr.m_pArr;}//拷贝指针地址 private: int m_iCount; int *m_pArr; }; int main(void) { Array arr1; Array arr2=arr1;//调用拷贝函数,发生浅拷贝 return 0; } 在进行浅拷贝后,arr2重写arr1指向的内存,即arr1和arr2指向同一内存,在进行销毁对象时,会对同一内存销毁两次,显然这是不对的,会造成程序崩溃。 深拷贝:当进行对象拷贝时,不是简单的值的拷贝,而是将堆中内存的数据也一一拷贝。(增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,把指针所指的内存的值依次拷贝,而不是简单的地址拷贝。) class Array { public: Array(){m_iCount=5;m_pArr=new int[m_iCount];} Array(const Array& arr) {m_iCount=arr.m_iCount; m_pArr=new int[m_iCount];//申请新的内存空间 for(int i=0;i<m_iCount;i++) {m_pArr[i]=arr.m_pArr[i];}}//拷贝堆中内存的数据 private: int m_iCount; int *m_pArr; }; int main(void) { Array arr1; Array arr2=arr1;//调用拷贝函数,发生深拷贝 return 0; }查看全部
-
class Coordinate { public: Coordinate(){} ~Coordinate(){} public: int m_iX; int m_iY; }; 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指向第二个元素 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++;//使p指向第一个元素 delete []p; p = NULL; system("pause"); return 0; }查看全部
-
对象成员函数: 坐标类构造函数没有参数,线段类实例化可以不使用初始化列表 坐标类必须有参数传入,线段类必须使用初始化列表的方式把数据传入查看全部
-
常成员函数不能改变数据成员的值 类的数据成员用const修饰时必须用初始化列表初始化查看全部
-
啦啦啦测试查看全部
-
this的值是对象本身地址;*this 就是对象arr1 1、 Array ... return *this 相当于: Array arrX = arr1; arrX是一个新的对象。即返回的this指针为另一个临时对象 2、 Array& ... return *this 相当于: Array & arrX = arr1; 此时arrX是arr1的别名。 3、 Array* ... return this 相当于: Array* arrX = this; 此时arrX的值 是地址,且是指向arr1的。用->访问或者*p. 访问查看全部
-
this指针:编译器无法识别参数和数据成员,需要标记参数或者数据成员; 编译器会对每个成员函数的参数列表中加一个this指针;查看全部
-
创建常指针:const Coordinate *p=& coor; 创建常引用:const Coordinate &c=coor;查看全部
-
C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。查看全部
-
对象引用和对象常引用都是对象的别名,一个对象只能有一个对象常引用。查看全部
举报
0/150
提交
取消