static&const
- 1、static關鍵字
-
- 面向過程
-
- 靜态全局變量
- 靜态局部變量
- 靜态函數
- 面向對象
-
- 靜态成員變量
- 靜态成員函數
- 2、const關鍵字
1、static關鍵字
總結static的作用:
- 使得檔案外部不能通路,檔案外可以建立同名變量或者函數。
- 保留上一時刻的值,隻能進行一次初始化操作。
面向過程
靜态全局變量
在全局變量前加上
static
關鍵字,使得被修飾的變量不能被其他檔案調用。例子:
//Example 2
//File1
#include <iostream.h>
void fn();
static int n; //定義靜态全局變量
void main()
{
n=20;
cout<<n<<endl;
fn();
}
//File2
#include <iostream.h>
extern int n; //編譯時報錯;
void fn()
{
n++;
cout<<n<<endl;
}
編譯時報錯,展現作用1。
靜态局部變量
在局部變量前加上
static
關鍵字,使得被修飾的變量不能被其他檔案調用。例子:
#include <iostream>
using namespace std;
void fn();
void main()
{
fn();
fn();
fn();
system("pause");
}
void fn()
{
static int n = 10;
cout << n << endl;
n++;
}
輸出結果:
10
11
12
展現作用2
靜态函數
其他檔案不能通路靜函數,展現作用1。
面向對象
靜态成員變量
與面向過程中的靜态局部變量類似,例子:
// Myclass.h
#pragma once
class Myclass
{
int a, b, c;
static int sum;
public:
void GetSum();
Myclass(int a, int b, int c);
~Myclass();
};
// Myclass.cpp
#include "Myclass.h"
#include<iostream>
using namespace std;
int Myclass::sum = 0;
Myclass::Myclass(int a, int b, int c)
{
this->a = a;
this->b = b;
this->c = c;
sum += a + b + c;
}
void Myclass::GetSum()
{
cout << "sum=" << sum << endl;
}
Myclass::~Myclass()
{
}
int main()
{
Myclass a(1, 2, 3);
a.GetSum();
Myclass b(4, 5, 6);
b.GetSum();
a.GetSum();
system("pause");
return 0;
}
靜态成員函數
靜态成員函數不含有this指針,隻能通路靜态成員變量和靜态成員函數,不能通路非靜态成員變量和非靜态成員函數。其存在隻是為了與靜态成員變量相對應。
2、const關鍵字
作用:
将變量設定為隻讀。
例如:
const int a = 1;
a = 2; //編譯錯誤
特殊情況,修飾指針時:
const * int pa = &a; //指向的對象隻讀
int * const pa = &a; //指針本身隻讀
const * const int pa = &a; //指針指向的對象和本身都隻讀
記憶方法,
const右邊是誰則修飾誰。如:
const *
修飾指針指向的對象;
const pa
修飾指針本身。
參考:https://www.cnblogs.com/BeyondAnyTime/archive/2012/06/08/2542315.html