一.友元函数
作用:非成员函数访问类中的私有成员
#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(); }