友元函数和static类
来源:互联网 发布:windows pyqt5 教程 编辑:程序博客网 时间:2024/05/18 01:45
友元
友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类。
友元可以出现在类定义的内部的任何地方。
友元不是授予友元关系的那个类的成员,所以它们不受声明出现部分的访问控制影响。
建议:将友元声明成组地放在类定义的开始或结尾。
1 友元类
class Husband
{
public:
friend class Wife;
private:
double money;//钱是老公私有的,别人不能动,但老婆除外
};
class Wife
{
public:
void Consume(Husband& h)
{
h.money -= 10000;//老婆可以花老公的钱
}
};
Husband h;
Wife w;
w.Consume(h);
2 使其他类的成员函数成为友元
class Husband; //1.声明Husband
class Wife //2.定义Wife类
{
public:
void Consume(Husband& h);
};
class Husband //3.定义Husband类
{
public:
friend void Wife::Consume(Husband& h);//声明Consume函数。
private:
double money;//钱是老公私有的,别人不能动,但老婆除外
};
void Wife::Consume(Husband& h) //4.定义Consume函数。
{
h.money -= 10000;//老婆可以花老公的钱
}
注意类和函数的声明和定义的顺序:
(1)声明类Husband
(2)定义类Wife,声明Consume函数
(3)定义类Husband
(4)定义Consume函数。
static 类成员
static 成员,有全局对象的作用,但又不破坏封装。
1 static 成员变量
static 数据成员是与类关联的对象,并不与该类的对象相关联。
static 成员遵循正常的公有/私有访问规则。
2 使用 static 成员而不是全局对象有三个优点。
(1) static 成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突。
(2) 可以实施封装。static 成员可以是私有成员,而全局对象不可以。
(3) 通过阅读程序容易看出 static 成员是与特定类关联的,这种可见性可清晰地显示程序员的意图。
3 static 成员函数
在类的内部声明函数时需要添加static关键字,但是在类外部定义函数时就不需要了。
因为static 成员是类的组成部分但不是任何对象的组成部分,所以有以下几个特点:
1) static 函数没有 this 指针
2) static 成员函数不能被声明为 const (将成员函数声明为 const 就是承诺不会修改该函数所属的对象)
3) static 成员函数也不能被声明为虚函数
4 static 数据成员
static 数据成员可以声明为任意类型,可以是常量、引用、数组、类类型,等等。
static 数据成员必须在类定义体的外部定义(正好一次),并且应该在定义时进行初始化。
建议:定义在类的源文件中名,即与类的非内联函数的定义同一个文件中。注意,定义时也要带上类类型+”::”
double Account::interestRate = 0.035;
5 特殊的静态常量整型成员
静态常量整型数据成员可以直接在类的定义体中进行初始化,例如:
static const int period = 30;
当然char 可以转换成整形,也是可以的, static const char bkground = ‘#’;
6 其他
(1)static 数据成员的类型可以是该成员所属的类类型。非 static 成员只能是自身类对象的指针或引用
class Screen
{
public:
// …
private:
static Screen src1; // ok
Screen *src2; // ok
Screen src3; // error
};
(2)非 static 数据成员不能用作默认实参,static 数据成员可用作默认实参
class Screen
{
public:
Screen& clear(char = bkground);
private:
static const char bkground = ‘#’;//static const整形变量可以在类内部初始化。
};
- 友元函数和static类
- 友元和static类成员
- 友元和static类成员
- 构造函数,友元,static类成员,复制控制
- 类的static成员变量和成员函数能被继承吗? 友元函数能访问父类的private变量吗?那static成员函数能是纯虚函数吗,能被继承吗?
- 模板类和友元函数
- C++ 友元函数 类和实例
- 模板类和友元函数
- 模板类和友元函数
- 模板类和友元函数
- C++友元函数和类
- C#Static类和Static构造函数
- 第12章 类 (part3) 友元函数 & static 类成员
- C++之模板(友元函数+友元类+静态Static)
- 友元函数和友元类
- 友元函数和友元类
- 友元类和友元函数
- 友元函数和友元类
- 面向对象
- hiho-1015- KMP算法
- oop &&GP 模板 ---> 特化和偏特化
- 归并排序
- Docker容器: 那些你不知道的事
- 友元函数和static类
- 搭建Spring SpringMVC Mybatis 框架(二)
- 服务(service)-----本地服务
- Java 四大域对象简述
- Android7.0 Doze模式分析 Doze介绍 & DeviceIdleController
- 2017年最新版贵州房卡麻将源码| 网狐6603麻将、房卡类子游戏《贵阳捉鸡麻将》:带手机端+服务端(含内核通信源码)+网站后台,包含多种玩法,支持微信登陆
- 蓝桥杯ALGO-148(最小公倍数 )
- selenium之 时间日期控件的处理
- 学习PHP第一天HELLO WORLD