C++总结之静态成员与友元函数

2018-01-30  本文已影响0人  bluewind1230

为什么要有静态成员?
全局变量可以实现数据共享,但是处处不可见,不安全---->静态成员可以实现一个类的所有对象的数据共享。

static特点:
其他几个总结(包含c语言):
友元函数

作用:授予某个对象访问本类所有成员的权限
某个对象指:
1.普通函数(友元函数)
2.另一个类中成员函数(友元成员函数)
3.另一个类(友元类)
通常格式为:
friend 被授予权限的函数原型;
friend int main ();
friend void :A:fun();
friend class A(所有成员函数皆为友元函数)

没有this指针的情况

this指针见这里https://www.jianshu.com/p/07b3e236054d;

静态成员函数一个例子
// staticTest.h文件
#pragma once                   
class staticTest
{
public:
    staticTest();
    ~staticTest();
    static int a;
    
};

// staticTest.cpp文件
#include "stdafx.h"
#include "staticTest.h"


staticTest::staticTest()
{
}
staticTest::~staticTest()
{
}
static void f() {
    printf("static函数测试1");
}


void f1() {
f();      //此处可以调用f函数,没有报错,因为f1与f在同一个cpp文件里面
}

//main.cpp文件

// static测试.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "staticTest.h"

int main()
{
      f();               //此处会报错,未定义标识符f,因为在.cpp文件里面用static修饰全局//变量或者函数,其他文件不可调用
    getchar();
    return 0;
}



一个变量或者说一个函数在声明时把给它添加了一个关键字static, 对于全局变量, 这个全局变量就不能被其它文件使用; 对于局部变量,则使得它的生存周期变得和全局变量一样长, 但作用域保持不变,
这里的文件指的是:那些包含有可执行代码的文件,不仅仅限于.h或是.cpp, 有函数定义的文件都是; 使用者最终被落实在一条语句中, 语句只能在函数内部出现,要想实现static的这种功能,不要把static修饰的变量或者函数写在头文件里面,直接定义在对应的.cpp文件里头即可,因为一般要把头文件包含了,所以static这个特殊功能可能实现不了. (用static修饰函数或全局变量的时候, 这些函数或全局变量就不要放在头文件了,只要写在相应.cpp文件中),具体参见上面这个例子;

上一篇 下一篇

猜你喜欢

热点阅读