为了账号安全,请及时绑定邮箱和手机立即绑定
  • 1.注意初始化列表格式 2.注意对象数组初始化时的格式 //定义对象数组 Coordinate coorArr[2]{{1,2},{3,4}};
    查看全部
    2 采集 收起 来源:单元巩固

    2017-01-17

  • delete []p: 加上[]能销毁所有的元素,如果不加只销毁第一个元素 其实就是调用了p中的析构函数
    查看全部
  • 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 &配合 都可对原对象做操作
    查看全部
  • 用const修饰对象成员,对象成员就变成了常对象成员 用const修饰成员函数,成员函数就变成了常成员函数。const要放在函数的最后, 一旦初始化就不能再修改,const就是干这个的,长对象成员用初始化列表初始化 函数里看着没有参数,实际上隐藏着this指针。常成员函数中隐藏的是常this指针,常指针指向的数据不允许被修改 例如:void Coordinate::changeX(){m_iX = 10;}即为void Coordinate::changeX(Coordinate *this){this->m_iX = 10;} void Coordinate::changeX()const{m_iX = 10;}即为void Coordinate::changeX(const Coordinate *this){this->m_iX = 10;}这里的m_iX = 10;的写法是错误的,this已经是常指针,通过常指针是无法修改值的 void changeX();与void changeX() const互为重载 要调用const修饰的常成员函数,实例化对象时,必须用const来修饰对象,const写在最前面
    查看全部
  • Array printInfo();要求返回值类型是一个对象,而Array Array::printInfo(){return *this}的返回值就是一个对象。 this指针系统会自己加 Array Array::printInfo(){return *this;}返回出去之后的*this指针是一个临时的对象,并不是arr1 Array& Array::printInfo(){return *this;}这样返回出去的就是arr1了。 在类中也要这样定义,加入引用之后,一切都清晰起来了 使用点号可以将多个方法穿起来使用 声明和定义函数用的是&,即为引用,返回值要加*,即为return *this; 调用函数是用点号. 声明和定义函数用的是*,即为指针,返回值不用加* ,即为return this;调用函数是用-> class Array { public: Array(int len); ~Array(); Array* setLen(int len);//注意 int getLen(); Array& printInfo();//注意 private: int len; }; Array* Array::setLen(int len) { this->len = len; return this; } Array& Array::printInfo() { cout<<"len = "<<len<<endl; return *this; } int main(void) { Array arr1(10); arr1.printInfo().setLen(5)->printInfo();//这里都是针对arr1的操作 system("pause"); return 0; } 1.可用this指针做返回 2.*this对象做返回与引用Array &配合 都可对原对象做操作
    查看全部
  • 常成员函数的本质(转换)
    查看全部
  • ctrl+k+c可以把选中的 片段注释掉。哇哦
    查看全部
  • 关于视频中的疑问 <br> 1.Array Array::printInfo() //返回值为对象 return *this //this为指针,*this为对象 <br> (1.)为什么主函数中还能访问printInfo()函数?// arr1.printInfo(); (2.)arr1.printInfo().setlen(5)是否是调用同一对象的两个成员函数? //应该怎样理解? <br> 2.Array& Array::printInfo() //取得是对象Array对象中的函数printInfo()的地址吗?应该怎样理解?<br> <br> 1、Array arr1 当实例化一个arr1的时候,因为有Array Array::printInfo()存在,系统会创建一个Array类的隐形变量,我们姑且用arr2来表示隐形变量,这时arr1和arr2指向的是不同的地址,有点类似于windows的复制操作。 系统执行arr1.printInfo( return * this)的时候,其实相当于arr1.printInfo( &arr2=*this; return arr2; ),所以arr1.printInfo().setlen(5)就是arr2.setlen(5).因为arr1和arr2指向两个不同的地址,所以是两个对象,所以 arr1.printInfo().setlen(5)是arr2的成员函数。 <br> <br> 2、Array arr1 当实例化一个arr1的时候,因为有Array& Array::printInfo()存在 ,系统这时候还会创建一个arr2出来,但是因为有&也就是引用,所以arr2和arr1指向的是同一个地址,这就有点类似于windows的快捷方式。系统执行arr1.printInfo( return * this)的时候其实返回的还是arr2,只是arr2和arr1指向同样的地址,所以arr1.printInfo().setlen(5)相当于arr2.setlen(5)也相当于arr1.setlen(5)。
    查看全部
  • 为什么需要const成员函数? 我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。 const成员函数和const对象 实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。例如,定义一个整型常量的方法为: const int i=1 ; 同样,也可以定义常量对象,假定有一个类classA,定义该类的常量对象的方法为: const classA a(2); 这里,a是类classA的一个const对象,"2"传给它的构造函数参数。const对象的数据成员在对象生存期内不能改变。但是,如何保证该类的数据成员不被改变呢? 为了确保const对象的数据成员不会被改变,在C++中,const对象只能调用const成员函数。如果一个成员函数实际上没有对数据成员作任何形式的修改,但是它没有被const关键字限定的,也不能被常量对象调用。
    查看全部
  • 用初始化列表的方式初始化对象成员,以严格区分哪些值传给哪个对象<br> 初始化列表的时候写 m_coorA(x1,y2),m_coorB(x2,y2)初始化,m_coorA,m_coorB,因为 Line 的成员是对象,因此在执行初始化对象成员 m_coorA(x1,y2),m_coorB(x2,y2)的时候就会是实例化对象 m_coorA,m_coorB,m_coorA(x1,y2),m_coorB(x2,y2)是给执行对象的时候自动执行的构造函数传递参数,也就是 m_coorA(x1,y2),m_coorB(x2,y2) 会自动各自执行构造函数,从而给 Coordinate 的数据成员 m_iX,m_iY赋值,也就是初始化坐标。 简单来说,初始化列表其实就是 数据(对象)成员((默认)形参) 的方式虚实结合传递的
    查看全部
  • 常成员函数的对象只是只读访问,不允许修改对象的成员变量,所以不能调用非常成员函数,因为,这些成员函数可能修改成员变量。 而普通成员函数当然可以调用常成员函数。
    查看全部
    1 采集 收起

    2016-04-04

  • 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; }
    查看全部
  • #include <iostream> #include <stdlib.h> #include "Array.h" using namespace std; int main() { Array arr1(5); Array arr2(arr1); arr1.printArr(); arr2.printArr(); system("pause"); return 0; }
    查看全部
  • class Coordinate { public: Coordinate(); ~Coordinate(); void setX(int x); int getX(); void setY(int y); int getY(); private: int m_iX; int m_iY; }; #include "Coordinate.h" #include <iostream> using namespace std; Coordinate::Coordinate() { cout <<"Coordinate()" <<endl; } Coordinate::~Coordinate() { cout <<"~Coordinate()" <<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; } #include "Coordinate.h" class Line { public: Line(); ~Line(); void setA(int x,int y); void setB(int x,int y); void printInfo(); private: Coordinate m_coorA; Coordinate m_coorB; };
    查看全部
  • class Coordinate { public: Coordinate(); ~Coordinate(); int m_iX; int m_iY; }; #include "Coordinate.h" #include <iostream> using namespace std; Coordinate::Coordinate() { cout <<"Coordinate" <<endl; } Coordinate::~Coordinate() { cout <<"~Coordinate" <<endl; } #include "Coordinate.h" #include <iostream> #include <stdlib.h> using namespace std; int main() { Coordinate coor[3]; coor[0].m_iX = 3; coor[0].m_iY = 3; 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[0].m_iY = 17; for(int i = 0;i<3;i++) { cout <<"coor_X" <<coor[i].m_iX <<endl; cout <<"coor_Y" <<coor[i].m_iY <<endl; } for(int i = 0;i<3;i++) { cout <<"P_X" <<p->m_iX <<endl; cout <<"P_Y" <<p->m_iY <<endl; p--; } p++; delete []p; p = NULL; system("pause"); return 0; }
    查看全部

举报

0/150
提交
取消
课程须知
本课程是C++初级课程 需要掌握C++语言基础语法 如果不太熟悉的话,可以观看: 《C++远征之起航篇》 《C++远征之离港篇》 《C++远征之封装篇(上)》
老师告诉你能学到什么?
1、对象数组的定义和使用 2、对象成员的定义和使用 3、深拷贝和浅拷贝 4、对象指针、对象引用的定义和使用 5、常对象指针、常对象引用、常成员函数的定义和使用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!