最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

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

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

    現(xiàn)在還不認(rè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ù)和后面要學(xué)到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存在于全局作用域中,可能會導(dǎo)致很多沖突,使用命名空間的目的是對標(biāo)識符的名稱進(jìn)行本地化,以避免命名沖突名字污染,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默認(rèn)訪問的是全局的rand函數(shù)地址,第二個printf用到的是otto命名空間里的rand,這樣就解決了命名沖突的問題。

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

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

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

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

1.3 命名空間的使用

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

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

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

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

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

二、C++輸入&輸出

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

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

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

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

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

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

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

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

• ?般日常練習(xí)中我們可以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)文章

  • 利用C語言編寫一個十六進(jìn)制日志轉(zhuǎn)換工具

    利用C語言編寫一個十六進(jìn)制日志轉(zhuǎn)換工具

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言編寫一個十六進(jìn)制日志轉(zhuǎn)換工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-11-11
  • 淺談C語言弱定義機(jī)制

    淺談C語言弱定義機(jī)制

    本文詳細(xì)介紹了C語言弱定義機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • C++ 的類型轉(zhuǎn)換詳解

    C++ 的類型轉(zhuǎn)換詳解

    本篇文章是對C++ 類型轉(zhuǎn)換的詳細(xì)介紹,需要的朋友參考下,小編覺得這篇文章寫的不錯,希望能夠給你帶來幫助
    2021-11-11
  • VS2019開發(fā)Linux C++程序的實現(xiàn)步驟

    VS2019開發(fā)Linux C++程序的實現(xiàn)步驟

    由于很多unix特有的函數(shù)無法在Windows上使用,而Vim又用的不太順手,突然想到最初用vs的時候有一個基于Linux的C++開發(fā)。本文就來介紹一下,感興趣的可以了解一下
    2021-07-07
  • C語言中#pragma?pack(1)的用法與注意點

    C語言中#pragma?pack(1)的用法與注意點

    #pragma用于指示編譯器完成一些特定的動作,下面這篇文章主要給大家介紹了關(guān)于C語言中#pragma?pack(1)的用法與注意點的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • OpenCV實現(xiàn)圖像邊緣檢測

    OpenCV實現(xiàn)圖像邊緣檢測

    這篇文章主要為大家詳細(xì)介紹了OpenCV實現(xiàn)圖像邊緣檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語言 數(shù)據(jù)結(jié)構(gòu)與算法之字符串詳解

    C語言 數(shù)據(jù)結(jié)構(gòu)與算法之字符串詳解

    這篇文章將帶大家深入了解C語言數(shù)據(jù)結(jié)構(gòu)與算法中的字符串,文中主要是介紹了字符串的定義、字符串的比較以及一些串的抽象數(shù)據(jù)類型,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • C++函數(shù)指針的用法詳解

    C++函數(shù)指針的用法詳解

    這篇文章主要為大家介紹了C++函數(shù)指針的用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

    2022-01-01
  • 淺談do {...} while (0) 在宏定義中的作用

    淺談do {...} while (0) 在宏定義中的作用

    下面小編就為大家?guī)硪黄獪\談do {...} while (0) 在宏定義中的作用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • VisualStudio2019配置OpenCV4.5.0的方法示例

    VisualStudio2019配置OpenCV4.5.0的方法示例

    這篇文章主要介紹了VisualStudio2019配置OpenCV4.5.0的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論

巩义市| 临澧县| 武强县| 牡丹江市| 浙江省| 孟州市| 文成县| 北宁市| 增城市| 宣汉县| 浙江省| 宝兴县| 榆社县| 松江区| 玉树县| 南部县| 社会| 东兰县| 乡城县| 乌苏市| 商都县| 开封县| 吴忠市| 青川县| 莫力| 延川县| 浦江县| 衡阳县| 新龙县| 兴宁市| 新余市| 松桃| 梁平县| 遂平县| 崇明县| 拉孜县| 张家港市| 汾阳市| 牟定县| 绥宁县| 陇西县|