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

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

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

前言

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

    還記得我們?cè)趯W(xué)C語(yǔ)言時(shí)的第一個(gè)代碼程序嗎?

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

    C++也兼容這種寫(xiě)法,但是C++有?套自己的輸入輸出,嚴(yán)格說(shuō)C++版本的hello world應(yīng)該是這樣寫(xiě)的。

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

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

一、命名空間

1.1 namespace的價(jià)值

    c語(yǔ)言項(xiàng)目類似下面程序這樣的命名沖突是普遍存在的問(wèn)題,C++引入namespace就是為了更好的解決這樣的問(wèn)題。

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

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

1.2 namespace的定義

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

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

#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;
}

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

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

• namespace只能定義在全局,當(dāng)然他還可以嵌套定義。

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;
}

• 項(xiàng)目工程中多文件中定義的同名namespace會(huì)認(rèn)為是?個(gè)namespace,不會(huì)沖突。

• C++標(biāo)準(zhǔn)庫(kù)都放在?個(gè)叫std(standard)的命名空間中。

1.3 命名空間的使用

    編譯查找?個(gè)變量的聲明/定義時(shí),默認(rèn)只會(huì)在局部或者全局查找,不會(huì)到命名空間里面去查找,所以下面程序會(huì)編譯報(bào)錯(cuò),

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

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

• 指定命名空間訪問(wèn),項(xiàng)目中推薦這種方式。

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

    通過(guò)“命名空間+::”的方式在指定命名空間訪問(wèn)。

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

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

    展開(kāi)后使用這個(gè)變量時(shí)就不用帶命名空間了。 

• 展開(kāi)命名空間中全部成員,項(xiàng)目不推薦,沖突風(fēng)險(xiǎn)很大,日常小練習(xí)程序?yàn)榱朔奖阃扑]使用。 

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

二、C++輸入&輸出

 • <iostream>是Input Output Stream 的縮寫(xiě),是標(biāo)準(zhǔn)的輸入、輸出流庫(kù),定義了標(biāo)準(zhǔn)的輸入、輸 出對(duì)象。

std::cin是 istream 類的對(duì)象,它主要面向窄字符的標(biāo)準(zhǔn)輸入流。

std::cout 是 ostream 類的對(duì)象,它主要?向窄字符的標(biāo)準(zhǔn)輸出流。

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

• <<是流插入運(yùn)算符,>>是流提取運(yùn)算符。

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

• IO流涉及類和對(duì)象,運(yùn)算符重載、繼承等很多面向?qū)ο蟮闹R(shí),這些知識(shí)我們還沒(méi)有講解,所以這里我們只能簡(jiǎn)單認(rèn)識(shí)?下C++ IO流的用法,后面會(huì)有專門的?個(gè)章節(jié)來(lái)細(xì)節(jié)IO流庫(kù)。

cout/cin/endl等都屬于C++標(biāo)準(zhǔn)庫(kù),C++標(biāo)準(zhǔn)庫(kù)都放在?個(gè)叫std(standard)的命名空間中,所以要 通過(guò)命名空間的使用方式去用他們。

• ?般日常練習(xí)中我們可以using namespace std,實(shí)際項(xiàng)目開(kāi)發(fā)中不建議使用

• 這里我們沒(méi)有包含,也可以使用printf和scanf,在包含間接包含了。vs系列編譯器是這樣的,其他編譯器可能會(huì)報(bào)錯(cuò)。

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

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

相關(guān)文章

最新評(píng)論