c++從入門到精通——概述(命令空間、面向對象、雙冒號作用域)

c++從入門到精通——Hello World書寫

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello, world!" << endl;
    system("pause");
    return EXIT_SUCCESS;
}

在線運行工具

面向對象三大特性

面向對象三大特性

封裝

把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
類將成員變量和成員函數封裝在類的內部,根據需要設置訪問權限,通過成員函數管理內部狀態。

繼承

繼承所表達的是類之間相關的關係,這種關係使得對象可以繼承另外一類對象的特徵和能力。
繼承的作用:避免公用代碼的重複開發,減少代碼和數據冗餘。

多態

多態性可以簡單地概括爲“一個接口,多種方法”,字面意思爲多種形態。程序在運行時才決定調用的函數,它是面向對象編程領域的核心概念。

雙冒號作用域運算符

通常情況下,如果有兩個同名變量,一個是全局變量,另一個是局部變量,那麼局部變量在其作用域內具有較高的優先權,它將屏蔽全局變量。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;


int atk = 200;
void test01()
{
	int atk = 100;

	cout << "攻擊力爲 : " << atk << endl;
	//雙冒號 作用域運算符  ::全局作用域
	cout << "全局攻擊力爲 : " << ::atk << endl;
}


int main(){

	test01();

	system("pause");
	return EXIT_SUCCESS;
}

運行

攻擊力爲 : 100
全局攻擊力爲 : 200
sh: 1: pause: not found

命名空間

定義命名空間

命名空間的定義使用關鍵字 namespace,後跟命名空間的名稱,如下所示:

namespace namespace_name {
   // 代碼聲明
}

爲了調用帶有命名空間的函數或變量,需要在前面加上命名空間的名稱,如下所示:

name::code;  // code 可以是變量或函數

創建一個命名空間

code爲函數的情況

#include <iostream>
using namespace std;
 
// 第一個命名空間
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二個命名空間
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
int main ()
{
 
   // 調用第一個命名空間中的函數
   first_space::func();
   
   // 調用第二個命名空間中的函數
   second_space::func(); 
 
   return 0;
}

code爲變量的情況

namespace A{
	int a = 10;
}
namespace B{
	int a = 20;
}
void test(){
	cout << "A::a : " << A::a << endl;
	cout << "B::a : " << B::a << endl;
}

命名空間可嵌套命名空間

namespace A{
	int a = 10;
	namespace B{
		int a = 20;
	}
}
void test(){
	cout << "A::a : " << A::a << endl;
	cout << "A::B::a : " << A::B::a << endl;
}

命名空間是開放的,即可以隨時把新的成員加入已有的命名空間中

namespace A{
	int a = 10;
}

namespace A{
	void func(){
		cout << "hello namespace!" << endl;
	}
}

void test(){
	cout << "A::a : " << A::a << endl;
	A::func();
}

聲明和實現可分離

聲明

#pragma once

namespace MySpace{
	void func1();
	void func2(int param);
}

實現

void MySpace::func1(){
	cout << "MySpace::func1" << endl;
}
void MySpace::func2(int param){
	cout << "MySpace::func2 : " << param << endl;
}

無名命名空間,意味着命名空間中的標識符只能在本文件內訪問,相當於給這個標識符加上了static,使得其可以作爲內部連接

namespace{
	
	int a = 10;
	void func(){ cout << "hello namespace" << endl; }
}
void test(){
	cout << "a : " << a << endl;
	func();
}

命名空間別名

namespace veryLongName{
	
	int a = 10;
	void func(){ cout << "hello namespace" << endl; }
}

void test(){
	namespace shortName = veryLongName;
	cout << "veryLongName::a : " << shortName::a << endl;
	veryLongName::func();
	shortName::func();
}

參考資料

黑馬程序員

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章