C++语言入门(五)友元及限定符
2021/12/26 12:07:11
本文主要是介绍C++语言入门(五)友元及限定符,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一.友元函数
作用:非成员函数访问类中的私有成员
#include<iostream> using namespace std; class Simple{ friend void Print(const Simple& s);//友元函数,可以调用Print函数 int n; public: Simple(int n):n(n){} }; void Print(const Simple& s){ cout << s.n << endl; } int main(){ Simple s(10); Print(s); }
二.const限定符
1.本质:只读
2.写法
const 类型 变量 = 初始值; const 类型 对象; 类型 const 变量 = 初始值; 类型 const 对象;
注:
- 定义时必须初始化
- 全局作用域声明的
const
变量默认作用域是定义所在文件 const
对象只能调用const
成员函数
3.const与指针
1 | const 指针 | 类型* const 变量 = 初始值; | 指针指向地址不能改变 |
2 | 指向const 对象的指针 |
| 指针指向对象不能改变 |
3 | 指向const 对象的const 指针 | const 类型* const 变量 = 初始值; | 指针指向地址和对象不能改变 |
4.const与引用
类型 const &变量 = 初始值;
与const 类型& 变量 = 初始值;
都是引用对象不能改变。
5.const与函数的参数和返回值
类型 | 语法 | 作用 | 说明 |
---|---|---|---|
const 参数 | 返回值类型 函数(const 类型 形参) | 函数内部不能改变参数的值 | 这样的参数的输入值 |
const 返回值 | const 返回值类型 函数(形参列表) | 函数的返回值不能改变 | 常用于字符串/指针 |
const修饰位置 | 作用 |
变量 | 变量不可修改,通常用来替代#define |
对象/实例 | 对象的成员变量不可修改,只能调用const 成员函数 |
函数参数 | 参数不能在函数内部修改,只作为入参 |
函数返回值 | 返回的结果不能被修改,常用于字符串 |
成员变量 | 只能在初始化列表中初始化 |
成员函数 | 不改变成员变量 |
#include <iostream> using namespace std; class Test{ public: void Print() const{ cout << "Test" << endl; } }; void Func(const Test& t){ t.Print(); } int main(){ Test t; Func(t);// 变量 Func(Test());// 匿名对象 const Test t2; Func(t2); // 只读对象 t2.Print(); }
三.static限定符
1.本质:
- 生存周期:整个程序的生存周期。
- 作用域:属于类,不属于对象。
2.语法
class 类名{ static 返回类型 函数(形参列表); };
3.调用
①通过类名:
类名::函数(实参列表);
②通过对象:
对象.函数(实参列表);
例:
#include<iostream> using namespace std; class Simple{ public: static int n;//将不能在初始化列表里初始化,将只能在类外面初始化 //Simple(int n):n(n){}//初始化列表 /*Simple(int n){//构造函数可以没有 this->n = n; }*/ void Print(){ cout << n << endl; } }; int Simple::n = 0;//要早早初始化 int main(){ Simple::n = 1000; //也可以用类名直接访问 Simple s; s.n = 200; // 用对象访问 s.Print(); cout << sizeof(s) << endl;//static对象不算在类里 Simple s2; s2.Print(); }
注:
- 在类定义中声明,但是在类实现中初始化。
- 在声明时需要指定关键字
static
,但是在类外定义时不要指定static
。 - 对象的大小不包含静态成员变量
四.const static限定符
既有static的特点又有const的特点
#include <iostream> using std::cout; using std::endl; class StaticConstTest{ public: void print(){ cout << test1 << " " << test2 << endl; } private: static const int test1 = 1;//static const/const static成员变量在类初始化必须是数字类型。 static const int test2; }; /* static */ const int StaticConstTest::test2 = 2;//变量声明处或者类外初始化 int main(){ StaticConstTest sct; sct.print(); }
这篇关于C++语言入门(五)友元及限定符的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升