cpp基础4

1.作用域

1.块作用域

{//块
}

2.函数作用域

void test()
{
    //函数
}

3.类作用域

class Name
{
//类
};

4.文件作用域

//全局
int g_global = 0;

2.可见性

标示符相同的局部覆盖全局的

3.对象生存期

1.静态生存期

程序编译的时候分配内存,运行结束时释放。
例子:全局、static修饰

  • 全局的没有作用域限制,编译的时候只执行一次 int g_global = 0
  • static 受到作用域的限制只在声明的作用域范围内有效,编译只执行一次 {int static s_i = 0;},以后每次调用 int static s_i=0都不再被初始化
2.动态生存期

执行完所在作用域及释放
例子:{int i = 0;} 执行完 释放 i

4.类的静态成员

使用:同一类中不同对象共享数据,static 修饰

1.静态数据成员
class Name
{
private:
    static int s_;
};
int Name::s_ = 0;
2.静态函数成员

1.不能访问非静态的对象,通过传递参数可以访问
2.函数里的变量自动变成静态的

class Name
{
public:
    static int getC();
};
int Name::getC(){}

//调用
Name::getC();

5.友元类

一个类主动声明那些函数和类是它朋友,给他们提供特殊的访问权限(private)

1.友元函数

在类中用 friend 修饰的非成员函数

class Name{
public:
    //不是类的成员函数,是友元函数
    friend float dist(Name &name);
private:
    int x;
};

float dist(Name &n)
{
    //可以访问类的私有成员 x
}
2.友元类

A类是B类的友元,A 里可以访问B的private、protected成员

class B{
    friend class A;
private:
    x
}
class A{
//可以访问 B 的私有和保护成员
}

注意

  • 友元关系是不能传递的(A是B的,B是C的,A和C没用关系)
  • 友元是单向的
  • 友元关系不能被继承

6.数据共享与保护

要共享又要防止被改变,const 修饰

1.常引用

常引用做形参不会改变实参值
例子:

void display(const float &x){
//这里不能改变 x的值
}
int a = 9;
display(a);

注意:引用传递的必须带有地址
display(5)错误调用

2.常对象

常对象必须进行初始化,而且不能被更新。
例子:

class A{
public:
    A(int x){ax = x;}
    int ax;
}
A const a(2);

注意:常对象的数据成员不能被改变,而且只能调用常函数成员

3.常成员函数

一个对象对应一个常函数成员

class A{
void print(){cout<<"aa";}
const void print(){cout<<"bb";}
};

A a;
a.print();//输出 aa
const A b;
b.print();//输出 bb
//函数重载

注意:

  • 不能更新数据成员,也不能调用不是const修饰的函数成员
  • 常对象只能调用常方法
  • const可用于重载函数的区分
4.常数据成员

一个对象对应一个常数据成员

class A{
public:
    static const int p;
};
const int A::p = 0;

注意:常静态数据成员类外进行声明和初始化

class A{
public:
    A(int x);
    const int &xx;
    //或者 const int xx;
};

//只能这样初始化?
A::A(int x):xx(x)  {
//xx = x不行两种初始化的不同
}

注意:这两个有什么区别?

7.extern

修饰的函数或变量必须是全局的,static不行

1.外部变量

不同文件共用一个变量

//文件1
int i=5

//文件2
extern int i;
void print()
{
    cout << i << endl;//i=5
}
2.外部函数

实际应用:微博、微信、QQ分享

//main.cpp
void myMain(int x){
    cout << x << endl;//输出 5
}

//File.h
extern void myMain(int x);

//File.cpp
{
    //调用 myMain,执行 main.cpp的此方法
    myMain(5);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值