对象指针
对象与一般变量一样,只不过对象的类型是程序员自己定义的,而变量的类型是C++给出的。当然可以用指针指向对象咯,叫做对象指针。对象指针常用作函数参数,这跟普通指针用于函数参数的目的是一样的,可以改变参数的值。
对象引用
老师刚刚说过,对象与一般变量一样,所以也可以给对象起一个别名,叫做对象引用。对象引用也常作为函数参数,跟对象指针作用一样,可以改变参数的值,但其机理不一样。这个我们之前学习过,所以不再赘述。
this指针
在类的每个成员函数中都隐藏了一个特殊的指针:this指针。当一个对象调用其成员函数是,系统先将该对象的地址赋值给this指针。也就是说在成员函数中,可以通过this指针获取到对象的地址。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
对象与一般变量一样,只不过对象的类型是程序员自己定义的,而变量的类型是C++给出的。当然可以用指针指向对象咯,叫做对象指针。对象指针常用作函数参数,这跟普通指针用于函数参数的目的是一样的,可以改变参数的值。
对象引用
老师刚刚说过,对象与一般变量一样,所以也可以给对象起一个别名,叫做对象引用。对象引用也常作为函数参数,跟对象指针作用一样,可以改变参数的值,但其机理不一样。这个我们之前学习过,所以不再赘述。
this指针
在类的每个成员函数中都隐藏了一个特殊的指针:this指针。当一个对象调用其成员函数是,系统先将该对象的地址赋值给this指针。也就是说在成员函数中,可以通过this指针获取到对象的地址。
#include <iostream>
using namespace std;
class L
{
public:
L(int x){a=x;}
void incr(int y){a+=y;}
void Print(){cout<<"a= "<<a<<endl;}
private:
int a;
};
void func(L *a1,L &a2)
{
a1->incr(4);
a2.incr(4);
}
void main()
{
L l1(1),l2(2);
func(&l1,l2);
l1.Print();
l2.Print();
}
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
对象数组和对象指针数组
老师真的说过,对象跟变量一样。所以就有对象数组,数组中每个元素都是同一个类的对象。对象数组可以是一维的,二维的或者多维的,一切都与普通数组类似。指向对象的指针也可以组成数组,数组中每个元素都是一个指针,这些指针指向同一个类的对象。这种数组就叫做对象指针数组。
指向对象数组的指针
是一种特殊的指向数组的指针,特殊在该数组的元素都是同一个类的对象。其余都与基础课程中学校的指向数组的指针相同。这里不再赘述。
无名对象
顾名思义,无名对象就是没有名字的对象。当给一个对象数组初始化的时候,需要用到无名对象。也可以用无名对象给已有的对象赋值。无名对象还可以作为实参。总之,需要用到一个对象的值,但有不关心这个对象叫什么名字时,可以用无名对象。
临时对象
拷贝构造函数的作用是用一个已有的对象的值创建一个新的对象。拷贝构造函数一般会被自动调用,例如,当对象作为实参时,系统自动调用拷贝构造函数,用实参对象的值创建形参对象。这里的实参可以是我们刚说的无名对象。再如,函数返回值是一个对象,系统会自动调用拷贝构造函数创建一个临时的无名对象,程序再将这个临时对象赋值为接收返回值的对象。
主函数体的第一行,创建对象数组L1,L1用三个无名对象初始化。然后创建对象指针数组L2,L2有1个元素,这个元素是指向L类的对象的指针。创建对象数组L3,L3没有初始化。
main函数体的第2行,创建类L的对象l,并在下一行将l的地址赋值给L2的第0个元素。
main函数体的第4行,用无名对象给L3的第0个元素赋值。
函数func中创建对象temp,执行到return temp;时,系统自动调用拷贝构造函数,用temp的值创建一个临时的无名对象。从func返回后,将该临时的无名对象的值赋值给L3的第1个元素。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
老师真的说过,对象跟变量一样。所以就有对象数组,数组中每个元素都是同一个类的对象。对象数组可以是一维的,二维的或者多维的,一切都与普通数组类似。指向对象的指针也可以组成数组,数组中每个元素都是一个指针,这些指针指向同一个类的对象。这种数组就叫做对象指针数组。
指向对象数组的指针
是一种特殊的指向数组的指针,特殊在该数组的元素都是同一个类的对象。其余都与基础课程中学校的指向数组的指针相同。这里不再赘述。
无名对象
顾名思义,无名对象就是没有名字的对象。当给一个对象数组初始化的时候,需要用到无名对象。也可以用无名对象给已有的对象赋值。无名对象还可以作为实参。总之,需要用到一个对象的值,但有不关心这个对象叫什么名字时,可以用无名对象。
临时对象
拷贝构造函数的作用是用一个已有的对象的值创建一个新的对象。拷贝构造函数一般会被自动调用,例如,当对象作为实参时,系统自动调用拷贝构造函数,用实参对象的值创建形参对象。这里的实参可以是我们刚说的无名对象。再如,函数返回值是一个对象,系统会自动调用拷贝构造函数创建一个临时的无名对象,程序再将这个临时对象赋值为接收返回值的对象。
#include <iostream>
using namespace std;
class L
{
public:
L(int x){a=x;}
void incr(int y){a+=y;}
void Print(){cout<<"a= "<<a<<endl;}
private:
int a;
};
L func()
{
L temp(3);
return temp; //
}
void main()
{
L l1[3]={L(1),L(2),L(3)}, *l2[1],L3[2];
L l(4);
l2[0]=&l;
L3[0]=L(5);
L3[1]=func();
}
主函数体的第一行,创建对象数组L1,L1用三个无名对象初始化。然后创建对象指针数组L2,L2有1个元素,这个元素是指向L类的对象的指针。创建对象数组L3,L3没有初始化。
main函数体的第2行,创建类L的对象l,并在下一行将l的地址赋值给L2的第0个元素。
main函数体的第4行,用无名对象给L3的第0个元素赋值。
函数func中创建对象temp,执行到return temp;时,系统自动调用拷贝构造函数,用temp的值创建一个临时的无名对象。从func返回后,将该临时的无名对象的值赋值给L3的第1个元素。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
常量成员
这一节将关键字const与类、对象相遇时碰撞出的火花。回忆一下const,const类型的变量或对象的值是不能被更新的,所以必须有初始化。关于const的用法,想起来一些了吧,下面讲新知识。
类的数据成员前面可以加上关键字const,称为常量成员。有三种:常量数据成员,静态常量数据成员,常引用。前两者的区别是静态常量数据成员还有一个关键字static,刚学过的,需要在类外初始化。最后一个常引用就是将引用说明为常量,该引用所引用的对象的值不能被更新。
类L有一个普通的数据成员a,常成员b,静态常成员c和常引用r。需要注意的地方均在注释中说明了。
常对象
定义对象时,在最前面加const,则该对象为常对象,务必一同进行初始化。之后该对象的值不能改变。例如:
上面两种写法都对。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
这一节将关键字const与类、对象相遇时碰撞出的火花。回忆一下const,const类型的变量或对象的值是不能被更新的,所以必须有初始化。关于const的用法,想起来一些了吧,下面讲新知识。
类的数据成员前面可以加上关键字const,称为常量成员。有三种:常量数据成员,静态常量数据成员,常引用。前两者的区别是静态常量数据成员还有一个关键字static,刚学过的,需要在类外初始化。最后一个常引用就是将引用说明为常量,该引用所引用的对象的值不能被更新。
class L
{
public:
L(int x, int y);
void incr(int y){a+=y;}
void Print(){cout<<"a= "<<a<<endl;}
private:
int a;
const int b; //常量数据成员
static const int c; //静态常量数据成员
const int & r; //常引用
};
const int L::c=123; //静态常量数据成员需要在类外初始化
L::L(int x, int y):b(y),r(a); //常量数据成员不能在函数体内赋值,只能在初始化列表赋初始值。
{
a=x;
}
类L有一个普通的数据成员a,常成员b,静态常成员c和常引用r。需要注意的地方均在注释中说明了。
常对象
定义对象时,在最前面加const,则该对象为常对象,务必一同进行初始化。之后该对象的值不能改变。例如:
const L l(3,5); L const l(4,5);上面两种写法都对。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
常成员函数
使用关键字const说明的成员函数叫做常成员函数。只有常对象才能调用常成员函数,常成员函数中不能更新对象的数据成员,也不能调用没有const修饰的成员函数。比较绕,用例子说明。
在类L中说明了两个同名函数Print,其中一个是常成员函数。类L中还有一个常成员b,它只能通过初始化列表进行初始化。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
使用关键字const说明的成员函数叫做常成员函数。只有常对象才能调用常成员函数,常成员函数中不能更新对象的数据成员,也不能调用没有const修饰的成员函数。比较绕,用例子说明。
#include <iostream>
using namespace std;
class L
{
public:
L(int x, int y):a(x),b(y){}
void incr(int y){a+=y;}
void Print(){cout<<"a= "<<a<<" b= "<<b<<endl;}
void Print()const;
private:
int a;
const int b; //常量数据成员
};
void Print()const
{
cout<<"a= "<<a<<" const b= "<<b<<endl;
}
void main()
{
L l1(1,2);
const L l2(3,4);
l1.Print();
l2.Print();
}
在类L中说明了两个同名函数Print,其中一个是常成员函数。类L中还有一个常成员b,它只能通过初始化列表进行初始化。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
子对象
对象跟变量一样,所以类A的对象,可以是类B的数据成员,这是就成为类B的子对象。当类B中出现了子对象时,该类的构造函数必须要包含子对象的初始化。
堆对象
在程序运行过程中,根据需要随时建立或删除的对象,叫做堆对象。前面说过根据对象生存期和作用域,可以将对象分为三类:全局对象,局部对象,静态对象。全局和局部对象是根据生存期分的,但他们的生存期是固定的。有时候需要程序员控制什么时候创建对象,什么时候释放对象。这时就要用到堆对象,分别对应new和delete运算符。很熟悉这两个运算符吧,我们也学过的。
main函数中new了一个无名对象,并将其地址赋值给l1。最后要记得delete掉new的对象,以免内存泄漏。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg
对象跟变量一样,所以类A的对象,可以是类B的数据成员,这是就成为类B的子对象。当类B中出现了子对象时,该类的构造函数必须要包含子对象的初始化。
堆对象
在程序运行过程中,根据需要随时建立或删除的对象,叫做堆对象。前面说过根据对象生存期和作用域,可以将对象分为三类:全局对象,局部对象,静态对象。全局和局部对象是根据生存期分的,但他们的生存期是固定的。有时候需要程序员控制什么时候创建对象,什么时候释放对象。这时就要用到堆对象,分别对应new和delete运算符。很熟悉这两个运算符吧,我们也学过的。
#include <iostream>
using namespace std;
class Point
{
public:
Point(int x, int y){a=x;b=y;}
void incr(int x,int y){a+=x;b+=y;}
void Print(){cout<<"a= "<<a<<" b= "<<b<<endl;}
private:
int a,b;
};
void main()
{
L *l1 = new L(1,2);
l1->Print();
delete l1;
}
main函数中new了一个无名对象,并将其地址赋值给l1。最后要记得delete掉new的对象,以免内存泄漏。
你要是不懂你可以随时在我的频道看消息 新内容充实自己的知识库。📚
【imToken】im钱包多签破解解除,要破解可以来联系: @heiksg