欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++?命名空間與輸入輸出操作代碼

 更新時間:2024年08月22日 11:02:16   作者:敲代碼的奧豆  
C++是一種面向?qū)ο蟮挠嬎銠C程序設(shè)計語言,?它擴展了C語言的功能,?并引入了面向?qū)ο缶幊痰母拍??如類、?繼承和多態(tài)等,C++是以C語言為基礎(chǔ)進行了拓展與創(chuàng)新,C++兼容C語言絕大多數(shù)的語法,這篇文章主要介紹了C++?命名空間與輸入輸出,需要的朋友可以參考下

前言

    C++是一種面向?qū)ο蟮挠嬎銠C程序設(shè)計語言,‌它擴展了C語言的功能,‌并引入了面向?qū)ο缶幊痰母拍睿?zwnj;如類、‌繼承和多態(tài)等,C++是以C語言為基礎(chǔ)進行了拓展與創(chuàng)新,C++兼容C語言絕大多數(shù)的語法。

    還記得我們在學C語言時的第一個代碼程序嗎?

#include<stdio.h>
int main()
{
 printf("hello world\n");
 return 0;
}

    C++也兼容這種寫法,但是C++有?套自己的輸入輸出,嚴格說C++版本的hello world應該是這樣寫的。

#include<iostream>
using namespace std;
int main()
{
 cout << "hello world\n" << endl;
 return 0;
}

    現(xiàn)在還不認識不要緊,本篇會講解C++的一些基礎(chǔ)知識, 看完后就明白是怎么一回事了。

一、命名空間

1.1 namespace的價值

    c語言項目類似下面程序這樣的命名沖突是普遍存在的問題,C++引入namespace就是為了更好的解決這樣的問題。

#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{
 printf("%d\n", rand);
 return 0;
}

    這里我們可以看到編譯器報錯了,因為在stdlib頭文件中包含一個名為rand的函數(shù)與定義的變量rand發(fā)生了命名沖突。在C/C++中,變量、函數(shù)和后面要學到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存在于全局作用域中,可能會導致很多沖突,使用命名空間的目的是對標識符的名稱進行本地化,以避免命名沖突名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對這種問題的。 

1.2 namespace的定義

• 定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接?對{}即可,{}中即為命名空間的成員,命名空間中可以定義變量/函數(shù)/類型等。

• namespace本質(zhì)是定義出?個域,這個域跟全局域各自獨立,不同的域可以定義同名變量,所以下面的rand不再沖突了。

#include <stdio.h>
#include <stdlib.h> 
// otto是命名空間的名字 
namespace otto
{
 // 命名空間中可以定義變量/函數(shù)/類型 
 int rand = 10;//變量
int Add(int left, int right)//函數(shù)
 {
 return left + right;
 }
class otto//類
 {
 public:
	void man()
	{
		return;
	}
 private:
		int x;
 };
}
int main()
{
 printf("%p\n", rand);
 printf("%d\n", otto::rand);
 return 0;
}

     第一個printf默認訪問的是全局的rand函數(shù)地址,第二個printf用到的是otto命名空間里的rand,這樣就解決了命名沖突的問題。

• C++中域有函數(shù)局部域,全局域,命名空間域,類域;域影響的是編譯時語法查找?個變量/函數(shù)/ 類型聲明或定義的邏輯,所有有了域隔離,命名沖突就解決了,局部域和全局域除了會影響 編譯查找邏輯,還會影響變量的生命周期,命名空間域和類域不影響變量生命周期。 

• namespace只能定義在全局,當然他還可以嵌套定義。

namespace otto
{
	namespace kun
		{
		int rand = 1;
		int Add(int left, int right)
		{
			return left + right;
		}
	} 
}
int main()
{
	printf("%d\n", otto::kun::rand);
	printf("%d\n", otto::kun::Add(1, 2));
	return 0;
}

• 項目工程中多文件中定義的同名namespace會認為是?個namespace,不會沖突。

• C++標準庫都放在?個叫std(standard)的命名空間中。

1.3 命名空間的使用

    編譯查找?個變量的聲明/定義時,默認只會在局部或者全局查找,不會到命名空間里面去查找,所以下面程序會編譯報錯,

namespace N
{
	int a = 0;
	int b = 1;
}
int main()
{
	printf("%d\n", a);
	return 0;
}

所以我們要使用命名空間中定義的變量/函數(shù),有三種方式:

• 指定命名空間訪問,項目中推薦這種方式。

int main()
{
 printf("%d\n", N::a);
 return 0; 
}

    通過“命名空間+::”的方式在指定命名空間訪問。

• using將命名空間中某個成員展開,項目中經(jīng)常訪問的不存在沖突的成員推薦這種方式。

using N::b;
int main()
{
 printf("%d\n", N::a);
 printf("%d\n", b);
 return 0; 
}

    展開后使用這個變量時就不用帶命名空間了。 

• 展開命名空間中全部成員,項目不推薦,沖突風險很大,日常小練習程序為了方便推薦使用。 

using namespce N;
int main()
{
 printf("%d\n", a);
 printf("%d\n", b);
 return 0; 
}

二、C++輸入&輸出

 • <iostream>是Input Output Stream 的縮寫,是標準的輸入、輸出流庫,定義了標準的輸入、輸 出對象。

std::cin是 istream 類的對象,它主要面向窄字符的標準輸入流。

std::cout 是 ostream 類的對象,它主要?向窄字符的標準輸出流。

std::endl 是?個函數(shù),流插入輸出時,相當于插入?個換行字符加刷新緩沖區(qū)。

• <<是流插入運算符,>>是流提取運算符。

• 使?C++輸?輸出更方便,不需要像printf/scanf輸?輸出時那樣,需要手動指定格式,C++的輸入輸出可以自動識別變量類型,其實最重要的是 C++的流能更好的支持自定義類型對象的輸入輸出。

• IO流涉及類和對象,運算符重載、繼承等很多面向?qū)ο蟮闹R,這些知識我們還沒有講解,所以這里我們只能簡單認識?下C++ IO流的用法,后面會有專門的?個章節(jié)來細節(jié)IO流庫。

cout/cin/endl等都屬于C++標準庫,C++標準庫都放在?個叫std(standard)的命名空間中,所以要 通過命名空間的使用方式去用他們。

• ?般日常練習中我們可以using namespace std,實際項目開發(fā)中不建議使用

• 這里我們沒有包含,也可以使用printf和scanf,在包含間接包含了。vs系列編譯器是這樣的,其他編譯器可能會報錯。

#include <iostream>
using namespace std;
int main()
{
	int a ;
	double b;
	char c ;
	// 可以自動識別變量的類型 
	cin >> a;
	cin >> b >> c;
	cout << a << endl;
	cout << b << " " << c << endl;
	return 0;
}

到此這篇關(guān)于C++ 命名空間與輸入輸出的文章就介紹到這了,更多相關(guān)C++ 命名空間與輸入輸出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論