当前位置: 首页 > news >正文

C++基础学习记录—作用域限定符

1、名字空间

命名空间实际上是由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间区域,把一些自己定义的变量、函数等 标志符存放在这个空间中,从而与其他实体定义分割开来。

std是C++标准库的一个命名空间,很多使用的内容都来自于标准命名空间,例如字符串std::string、std::cout

当项目中包含 using namespace std时,代码中使用std名字空间中的内容就可以省略前面的std::

当你在程序的顶部写下 using namespace std; 时,你告诉编译器在接下来的代码中,任何没有明确指定命名空间的标识符(Identifier),如果在当前作用域和全局作用域中找不到,就去 std 命名空间中查找。这意味着你可以直接使用 cout 而不是 std::cout 来输出信息,使用 vector 而不是 std::vector 来声明一个向量,等等。

#include <iostream>namespace test
{int a=10;int b=20;
}using namespace test;int b=22;
int main()
{int a=5;int b=33;std::cout << a << "  test命名空间内:" << test::a << std::endl;//5  10std::cout << ::a << std::endl;//10std::cout << b << "  test命名空间内:" << test::b << std::endl;//33 20std::cout << ::b << std::endl;//22return 0;
}

2、类内声明、类外定义

类里函数声明和定义分离时,需要用类名::指明函数属于哪个类,指明函数范围

#include<iostream>
#include<string>using namespace std;class Demon{
public://类内声明无参构造函数Demon();//类内声明成员函数void test(string s);~Demon();
};//类外定义无参构造函数
Demon::Demon(){cout << "创建了一个对象" << endl;
}void Demon::test(string s){cout << "成员函数:" << s << endl;
}Demon::~Demon(){cout << "销毁了" << endl;
}int main(){Demon d;d.test("admin");Demon *d2 = new Demon;d2->test("murphy");return 0;}

3、配合static关键字使用

1、静态局部变量

使用static修饰局部变量,这样的变量就是静态局部变量

静态局部变量在第一次调用时创建,直到程序结束后销毁,同一个类的所有对象共用这一份静态局部变量。

#include<iostream>using namespace std;
class Test{
public:void func(){//a是普通的局部变量,函数调用时创建,函数调用调用结束时销毁int a=1;//static修饰的b是静态局部变量,第一次调用时创建,程序结束时销毁,同一个类的所有对象共用这一份静态局部变量static int b=2;cout << "a=" << ++a << "    " << &a << endl;cout << "b=" << ++b << "    " << &b << endl;}
};int main(){Test t1;t1.func();Test t2;t2.func();t1.func();
//    注意:a可能在同一个内存地址反复创建销毁。return 0;
}

2、静态成员

1、静态成员数据

定义:static关键字修饰的成员变量,叫做静态成员变量。

特点:

1、必须得类内声明,类外初始化。

2、所有对象共享,程序运行时创建,程序结束时销毁

3、公共权限下,除了用对象访问静态成员变量,也可以使用Test(类名)::访问静态成员变量,但更推荐使用类名访问。

#include<iostream>using namespace std;
class Test{
public:int a=1;//static int b=2;// 错误static int b;//必须类内声明  类外初始化
};int Test::b=10;//类外初始化int main(){//静态成员变量 可以通过类名直接访问,也可以通过对象访问//推荐通过类名访问//通过类名访问cout << Test::b << "    " << &Test::b << endl;  //10 0x403008//cout << Test:: a << endl;// 错误  成员变量不可以脱离对象访问//通过对象访问Test t1,t2;cout << t1.a++ << " " << &t1.a << endl; //1 0x61febccout << t2.a++ << " " << &t2.a << endl;//1  0x61feb8cout << "========================" << endl;cout << t1.b++ << " " << &t1.b << endl;//10 0x403008cout << t2.b++ << " " << &t2.b << endl;//11 0x403008cout << Test::b << " " << &Test::b << endl; //12 0x403008//注意://1、一个类的所有对象,包括类本身共享同一个静态成员变量//2、静态成员变量的生命周期:在程序开始运行时就开辟内存直到程序运行结束销毁。return 0;}
2、静态成员函数

定义:static修饰的函数就是静态成员函数。

特点:

1、对象产生之前就可以通过类名调用.(普通成员函数必须需要对象来调用)

2、静态成员函数只可以访问静态成员变量。不可以访问非静态成员变量,因为静态成员函数没有this指针。

3、静态成员函数声明和定义分离时,static只需添加在声明处(类内)

4、静态成员函数与静态成员变量相似,都可以通过类名直接调用,也可以通过对象调用,更推荐使用类名调用。

#include<iostream>using namespace std;
class Test{
public:int a=1;static int b;void test(){cout << b << endl;cout << a << endl;}//类内静态成员函数的声明static void func();static void static_test(){cout << b << endl;func();//cout << a << endl; //错误 静态成员函数不能访问普通成员变量//test(); //静态成员函数不能调用普通函数}};int Test::b=2;
//类外静态成员函数的定义
void Test::func(){cout << "静态成员函数" << endl;
}
int main(){Test::static_test();//Test::test();//错误 普通成员函数只能通过对象进行调用Test t1;t1.test();//调用普通成员函数t1.static_test();//调用静态成员函数return 0;
}


http://www.mrgr.cn/news/90547.html

相关文章:

  • 第二天:工具的使用
  • PySpark查找Dataframe中的非ASCII字符并导出Excel文件
  • 计算机组成原理
  • 网络安全 | 网络安全自动化:让防护更智能高效
  • STM32-知识
  • idea插件开发dom4j报错:SAXParser cannot be cast to class org.xml.sax.XMLReader
  • Electron 主进程和渲染进程通信方法总结
  • MFC线程安全案例
  • H5接入支付宝手机网站支付并实现
  • 软件工程-软件设计
  • Linux 配置 MySQL 定时自动备份到另一台服务器
  • Webpack包
  • 2.【线性代数】——矩阵消元
  • springCloud-2021.0.9 之 GateWay 示例
  • (Xshell 8 + Xftp 8)下载安装miniconda至服务器指定目录+配置虚拟环境
  • 微信小程序网络请求封装
  • AI-Engine-Direct-Helper 快速上手及环境配置
  • linux运行kettle 遇到问题汇总
  • 自然语言处理NLP入门 -- 第二节预处理文本数据
  • fps动作系统9:动画音频
  • 【Android开发AI实战】选择目标跟踪基于opencv实现——运动跟踪
  • django中间件,中间件给下面传值
  • 使用mermaid画流程图
  • 【核心特性】从鸭子类型到Go的io.Writer设计哲学
  • 企语企业管理系iFair(F23.2_a0)在Debian操作系统中的安装
  • C++基础学习记录—this指针和const关键字