类和对象第四讲
对象数组的使用方法:
#include <iostream>
using namespace std;
class myclass
{
public:
myclass(int h=10,int w=12,int l=15)
{
h1=h;
w1=w;
l1=l;
}
int show_v();
private:
int h1;
int w1;
int l1;
};
int myclass::show_v()
{
return (h1*w1*l1);
}
int main()
{
myclass a[3]=
{
myclass (10,12,15),
myclass (15,18,20),
myclass (16,20,26)};
cout<<"a[0] is : "<<a[0].show_v()<<endl;
cout<<"a[1] is : "<<a[1].show_v()<<endl;
cout<<"a[2] is : "<<a[2].show_v()<<endl;
return 0;
}
对象指针
对象指针的使用方法:
#include <iostream>
using namespace std;
class myclass
{
public:
myclass(int h,int m,int s)
{
hour=h;
minute=m;
sec=s;
}
int hour;
int minute;
int sec;
void get_myclass();
};
void myclass::get_myclass()
{
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main()
{
myclass t1(10,13,56); //定义myclass类的对象t1.
int *p1=&t1.hour; //定义指向整型数据的指针变量p1,并使p1指向t1.hour.
cout<<*p1<<endl; //输出p1所指的数据成员t1.hour.
t1.get_myclass(); //调用对象t1的成员函数get_myclass.
myclass *p2=&t1; //定义指向myclass类的指针变量p2,并是p2指向t1.
p2->get_myclass(); //通过p2所指对象(即t1)的get_myclass函数.
void (myclass :: *p3)(); //定义指向myclass类公用成员函数的指针变量p3.
p3=&myclass::get_myclass; //使p3指向myclass类公用成员函数get_myclass
(t1.*p3)(); //调用对象t1中p3所指的成员函数(即t1.get_class).
}
可以看到输出结果如下:
10 (主函数第4行的输出)
10 : 13 :56 (主函数第5行的输出)
10 : 13 :56 (主函数第7行的输出)
10 : 13 :56 (主函数第10行的输出)
下面开始分析,在主函数中,定义了myclass类对象t1,并使之初始化.定义p1为指向整型数据的指针变量,并使之指向t1.hour. 然后输出p1所指的整型数据(即t1.hour).主函数第5行调用对象t1的成员函数get_myclass,输出t1的hour,minute和sec的值.第6行定义指向myclass类的指针变量p2,并使之指向对象t1,第4行调用p2所指向对象(即t1)的get_myclass函数.用样可以输出t1中的hour,minute,sec的值. 第8行定义指向myclass公用成员函数的指针变量p3,第9行是p3指向myclass类的公用成员函数get_myclass,第10行调用对象t1中p3所指的成员函数,即t1.get_myclass(),输出t1中的hour,minute,sec的值.
应该不难理理解,我是这么理解的,指针指向谁,就代表指针现在就是他所指的那个东西.
介绍一点身为程序员应该知道的小东西
This指针:每个对象的数据成员都分别占用存储空间,如果对同个类定义了n个对象,则组成n组同样大小的空间以存放n个对象中的数据成员.但是不同的对象都调用同一个函数代码段.
在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this.他是指向本类对象的指针,他的值是当前被调用的成员函数所在的对象的其实地址.
This指针是隐式使用的,他是作为参数被传递给成员函数的.例如:在程序中show_v的定义如下:
Int box ::show_v()
{
Return(h*w*l);
}
C++把他处理为
Int box::show_v()
{
Return(this->h*this->w*this->l);
}
Return (h*w*l); //隐式的使用this指针
Return(this->h*this->w*this->l); //显式的使用this指针
公用数据的保护
有时候需要使数据能在一定范围内共享,又要保证他不被任意修改,这是就引入一个新东西-----const.即把有关的数据定义为常量.
定义常对象的一般形式为:
类名 const 对象名[ (实参表列) ];
也可以把const卸载最左面:
Const 类名 对象名 [ (实参表列) ];
这二者是等价的.
如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式的构造函数的析构函数)