第9章类的更多功能
内容提要
对象的指针与引用
类的静态成员
复制构造函数
4
1
2
3
上机操作为主,课堂讲解为辅;
鼓励读书自学,提倡上机实践;
对象数组
对象数组:用类类型声明的数组。
class CStudent
{ ……}
CStudent ban[80];
对象数组的每个数组元素都是一个对象
创建每个对象ban[i](数组元素)时都会调用构造函数进行初始化
对象的指针与引用
对象比较大(包含很多数据)时,进行值传递要复制整个对象,耗时且占空间
有没有不复制整个对象的方法?
传递对象的地址和引用
对象的指针
声明类对象的指针变量(地址变量)
CStudent* p=0; //什么含义?
将对象的地址保存到指针变量
CStudent s5;
p = &s5; //什么含义?
通过对象指针访问对象成员,用间接访问符->
#include <iostream>
using namespace std;
#include "" //包含类的定义
int main()
{ CStudent s5, *p=0; //声明对象,对象指针
p=&s5; //p=new CStudent;
char na[]= "Zhang San";
p->input(10201,na,); //调用成员函数
p->display();
//delete p;
return 0;
}
【例】
对象的引用
复习:引用是一个变量的别名 int &b = a;
引用作函数形参 void swap(int & a, int & b)
对象引用—对象的别名—作函数形参,有指针的优点,没有指针那么复杂,简单易用
void CStudent::compare(CStudent &ss)
{
if (score > )
cout<<"first score is higher: "<<score<<endl;
else
cout<<"second score is higher: "<<score<<endl;
}
#include <iostream>
using namespace std;
#include “”//包含类的定义
int main()
{ CStudent s1,s2;
char na1[]= "Zhang San";
(10201,na1,75);
char na2[]= "Li Si";
(10202,na2,85);
pare(s2);
return 0;
}
this指针
this指针:成员函数在执行时都有隐含的this指针,指向调用该成员函数的对象
也可以显式地使用this指针
void CStudent::compare(CStudent &ss)
{ if (score > ) ……}
{ if (this->score > ) ……}
int main()
{ CStudent s1,s2;
……
pare(s2);
return 0;}
类的静态成员
静态数据成员
使用关键字static将(需要共享的)数据成员声明为类的静态数据成员
静态数据成员可以通过名字解析运算符::来访问
静态数据成员的提出是为了解决数据共享的问题
可看成是一个全局变量
例如,将鼠标的位置、状态及其操作封装为一个类,不管该类有多少个对象,鼠标始终只有一个,所有的该类对象共享鼠标的位置、状态等数据成员的值。
类的静态成员在存储空间有且只有一份
即使没有创建任何一个该类对象,
不管有多少个该类的对象存在,
访问静态数据成员:通过类名访问、类的对象访问
class A
{
public:
static int x, y;
};
int A::x=5, A::y=10;
void main( )
{ int a, b;
a=A::x; b=A::y; //通过什么访问?
}
必须在创建任何对象前初始化静态成员
对上面的类A的静态成员x、y初始化的方法如下:
int A::x=5;
int A::y=10;
若整个程序分为多个源程序文件进行分块编译,应将静态成员的初始化放在某一个源文件中。
如果将静态变量的初始化放在头文件中被多个源程序文件包含,将导致变量的重复定义。
静态成员初始化
C++ ppt类更多功能 来自淘豆网m.daumloan.com转载请标明出处.