静态成员
静态成员的定义、初始化、调用
友元的作用和定义
第三章综合练习主要内容为什么需要静态成员
A1037528id
123456pwd
1750.55bal
10min
John
A2180150id
666666pwd
5013.25bal
10min
Cane
A5280175id
654321pwd
10000.25bal
10min
Tom
每个对象中 min的值都等于 10,在内存中有多个副本,造成空间浪费,而且不易管理
Account
10min
A1037528id
123456pwd
1750.55bal
John
A2180150id
666666pwd
5013.25bal
Cane
A5280175id
654321pwd
10000.25bal
Tom
min不再占用多个对象的存储空间,而是让各对象共享数据成员 min的值,则内存中
min只有一个副本
静态成员是解决同一个类的不同对象之间的数据和函数共享问题。
静态成员 是类的所有对象共享的成员,而不是某个对象的成员,它 在对象中不占存储空间,
是 属于整个类的成员 。
静态成员分为静态数据成员和静态成员函数。
格式:
static <静态成员的定义 >;
什么是静态成员
Account类静态成员的定义:
class Account
{
};
static void deposit(<参数列表 >);
static void withdraw(<参数列表 >);
void display();
char id[8];
char pwd[6];
double balance;
public:
private:
static double min_balance;
为什么要进行初始化静态数据成员属于静态变量,必须对其进行初始化后才能使用。
何时进行初始化静态变量不应该占用函数的空间,
且静态数据成员不能占用对象的存储空间,因此一般在 类的实现部分 完成静态数据成员的初始化。
静态数据成员初始化格式:
#include <iostream.h>
#include,Account.h”
//Account.cpp文件中的代码
void Account::deposit(……)
{
<函数体实现 >
}
//实现,存钱,成员函数
double Account::min_balance = 10; //注意不要写错!
<类型 > <类名 >::<静态数据成员 >=<值 >;
静态成员函数访问数据成员
void Account::deposit(double amount)
{
balance += amount;
cout<<“Balance in your account is,”<<balance<<endl;
}
//以前我们实现的,存钱,成员函数
void Account::deposit(double amount,Account a)
{
a.balance += amount;
cout<<“Balance in your account is,”<<a.balance<<endl;
}
//现在实现的静态,存钱,成员函数
{
a.balance - = amount;
cout<<“Balance in your account is,”<<a.balance<<endl;}
if (amount >= min_balance)
{
cout<<“There is not enough money in your account!<<endl;
exit(1);}
//实现静态,取钱,成员函数
void Account::withdraw(double amount,Account a)
总结:静态成员函数可以直接访问该类的静态数据成员和成员函数,但是要在静态成员函数中使用非静态成员时,要通过对象来调用。
静态成员的调用:
格式:
<类名 >::<静态成员 >
示例
{
……
}
……
a1.display(); //非静态成员函数调用
void main()
Account::deposit(<参数表 >); //静态函数调用几点说明:
静态成员属于类,在类中定义;
静态数据成员在类的实现部分初始化;
用 <类名 >::<静态成员 >调用。
友元
根据封装性,一般将类中的数据成员声明为私有成员,外部可以通过类的公有成员函数对私有成员进行访问。
但有时类体外的一些函数需要直接访问类的数据成员,又不改变其数据成员的访问权限,这时,需要定义友元。
友元提供了不同类或对象的成员函数之间、类的成员函数与普通函数之间进行数据共享的机制。
友元 可以访问类中所有成员,但 不是类的成员 。
友元虽然不是类的成员,但它是类的朋友,可以直接访问类的所有成员 。
如果友元是普通函数或另一个类的成员函数,
称为 友元函数 ;如果友元是一个类,则称为 友元类,友元类的所有成员函数都成为友元函数。
友元的作用
友元函数和友元类在被访问的类中声明
友元函数的定义
friend <返回值类型 > <函数名 >(<参数表 >);
友元类的定义
friend <类名 >;
友元的定义
this指针一般用于返回当前对象自身。
this指针隐含于每一个类的成员函数中,每个成员函数都有一个 this指针参数,指向 调用该函数的 对象 。
通常不显式地使用 this指针来引用数据成员。
可以使用 *this来标识调用该成员函数的 当前对象 。
静态成员中不能访问 this指针,因为静态成员函数不属于任何对象。
this指针
a1.display();
a1
this指针示例
display函数所占用的空间
this
void Account::display(){
cout<<“Account ID”<<id<<endl;
cout<<“Balance is,”<<balance<<endl;}
//实现,查询余额,成员函数
cout<<“Balance is,”<<this->balance<<endl;
等价的地址