1.静态成员变量和成员函数

思考:每个变量,拥有属性。有没有一些属性,归所有对象拥有?

1.1 静态成员变量

1)定义静态成员变量
  关键字 static 可以用于说明一个类的成员

    静态成员提供了一个同类对象的共享机制

   把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个static 成员
    

   静态成员局部于类,它不是对象成员

1.2 静态成员函数

#include <iostream>
using namespace std; class BB {
public: //
BB() { } //无参构造函数
BB (int a) { Pub_mem = a; } //有参构造函数 //普通成员函数
void printC() {
cout<<"c:"<<Pri_Static_mem<<endl;
}
void AddC() {
Pri_Static_mem = Pri_Static_mem + ;
} public:
static void getC() { //静态成员函数
cout<<"静态成员函数 c:"<< Pri_Static_mem <<endl;
/**
* 静态函数中 不能使用 普通和静态(私有/公有)成员变量
* 静态函数中 不能使用 普通和静态(公有)成员函数, 但可以使用 静态(私有)成员函数
*/
// cout<<"a:"<<a<<endl; //error C2597: 对非静态成员“BB::a”的非法引用
// cout<<"mem:"<<Pub_mem<<endl; //error C2597: 对非静态成员“BB::Pub_mem”的非法引用
// printC();//error: cannot call member function ‘void BB::printC()’ without object
Private_Static_func();
} private:
static void Private_Static_func(){
//
} public:
int Pub_mem; //公有数据成员
static int Pub_Static_mem; //公有静态数据成员 private:
int a; //私有数据成员
int b; //私有数据成员
static int Pri_Static_mem; //私有静态成员变量
protected:
}; /* 如果使用了静态变量:一定要注意初始化!!!! */
int BB::Pri_Static_mem = ; //声明与定义 静态数据成员变量 初始值为10 [私有]
int BB::Pub_Static_mem = ; //声明与定义 静态数据成员变量 初始值为1 [公有] int main(void) {
/*--------------------------------------------------------------
私有静态数据变量:只能调用函数进行访问
--------------------------------------------------------------*/
BB b1, b2, b3;
b1.printC(); //
b2.AddC(); //
b3.printC(); //11 //私有/公有静态成员变量/函数的调用方法 对象. 类::
b3.getC();
BB::getC(); cout<<"hello..."<<endl; /*--------------------------------------------------------------
公有静态数据变量: 可以直接调用该变量进行修改
--------------------------------------------------------------*/
BB cs(); //mem = 7 初始化
for(int i = ; i < ; i++) {
BB::Pub_Static_mem += i ;
cout << BB::Pub_Static_mem << '\t' ;
}
cout<<endl; return ;
}

c:10
c:11
静态成员函数 c:11
静态成员函数 c:11
hello...
1 2 4 7 11


2.友元函数和友元类

2.1 友元函数

?为什么设计友元类和友元函数?
  C++中的类对成员函数和变量进行了封装,但同样为编程人员提供了一个破坏该封装的操作,
  方便程序员对类的私有成员和函数进行访问
重点掌握友元函数即可!

2.2 友元类

#include <iostream>
using namespace std; class A
{
public:
//友元类B
friend class B; //1 声明的位置 和 public private没有关系
//2 函数modifyA 是 类A的好朋友

friend void modifyA(A *pA, int _a); A(int a=, int b=)
{
this->a = a;
this->b = b;
}
int getA()
{
return this->a;
} private:
int a;
int b;
}; void modifyA(A *pA, int _a)
{
pA->a = _a;
} //若B类是A类的友员类,则
// 在B类的所有成员函数都是A类的友员函数
// 在B中可以访问A类的私有成员 私有函数
//
友员类通常设计为一种对数据操作或类之间传递消息的辅助类
class B
{
public:
void Set(int a)
{
Aobject.a = a;
}
void printB()
{
cout<<Aobject.a <<endl;
}
private:
A Aobject;
}; int main(void)
{
/* 友元函数 */
A a1(, );
cout<< a1.getA()<<endl;
modifyA(&a1, );
cout<< a1.getA()<<endl; /* 友元类 */
B b1;
b1.Set();
b1.printB(); cout<<"hello..."<<endl;
return ;
}

1
300
700
hello...

最新文章

  1. 初识Spring
  2. sqlserver行列转换
  3. Java中重点关键词的区分
  4. css中解决img在a元素中使得a元素撑大写法
  5. SQL SERVER NULL值和连接注意问题
  6. 【中途相遇+二进制】【NEERC 2003】Jurassic Remains
  7. perspective结合transform的3D效果
  8. Sublime 脚本 配置 (lua 和 JavaScript篇)
  9. Qt5该插件机制(4)--QtMeta信息窗口小部件metaData
  10. 字符串匹配算法之KMP
  11. poj 2299 Ultra-QuickSort 题解
  12. 【CentOS】MySQL的安装
  13. python自学第10天,生成器
  14. RNN(2) ------ “《A Critical Review of Recurrent Neural Networks for Sequence Learning》RNN综述性论文讲解”(转载)
  15. JavaScript高级用法二之内置对象
  16. CentOS 7.0关闭默认firewall防火墙启用iptables防火墙
  17. [转载]CMMI之功能点估算法:EI、EQ和EO
  18. 信号处理函数的返回setjmp/longjmp
  19. plsql链接数据库配置
  20. POJ 3259 Wormholes(Bellman-Ford)

热门文章

  1. DOM(一):节点层次-Node类型
  2. fluent Python
  3. 【转】基于JavaMail的Java邮件发送
  4. Win7多用户同时登陆
  5. git中.gitignore 文件
  6. 第38章 I2S—音频播放与录音输入—零死角玩转STM32-F429系列
  7. 阅读detection
  8. windows下配置kafka
  9. 前端之jquery函数库
  10. FastDFS文件管理系统