天天看點

C++學習筆記——static&const1、static關鍵字2、const關鍵字

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

c++

繼續閱讀