亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 《c++編程思想》-- 第5章 筆記.txt

?? C&C++論壇精華
?? TXT
字號:
作者:rick1126
email: rickzhang@sina.com
日期:7/31/2001 10:11:18 PM

第5章 函數重載和缺省參數

5.0 基本概念

    【名字】

      . 能使名字方便地使用是任何程序設計語言的一個重要特征
      . 依靠系統描述的名字, 才可以寫出人們易于理解和修改的程序
      . 問題在于如何將語言的細微差別的概念映射到編程語言 -- 例如一詞多意的情況

    【函數重載】

      . 使用相同的函數名稱不同的參數列表和返回值類型作為重載的區分依據
      . 重載構造函數可以使用多種不同的方式初始化類對象實例

    【缺省參數】

      . 針對冗長或者重復的函數調用參數, 使用缺省值的方式減少輸入的煩瑣和可能的錯誤

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

5.1 范圍分解

    【編譯器對于重載函數名稱的處理】

      . 函數名不僅與類名關系密切, 而且還跟其他因素相關
      . 重載函數要求參數不同, 而且不能利用返回值進行重載
      . 同名函數要么是范圍不同, 要么是重載函數, 編譯器總是生成不同的內部名稱

    【安全類型連接】

      . 在C下允許函數沒有聲明直接調用,為此可能導致編譯器按照調用方式推斷函數聲明, 造成難以發現的錯誤
      . 在C++中不允許函數沒有聲明就被使用, 名詞分解提供了一個安全連接

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

5.3 缺省參數

    【缺省參數】

      . 在函數聲明的時候給定出初始值, 調用的時候如果沒有給出指定值, 編譯器就使用初始值代替.
      . 相關使用規則:
        - 參數列表的后部參數才可以是缺省的, 否則編譯器無法根據位置判斷, 缺省值后面必須全部是缺省參數
        - 而且如果有多個缺省參數存在, 而相對后面一個值需要指定, 則前面的都需要給出, 即使就是缺省的
      . 這樣如果發現缺省參數不在需要可以簡單的去掉而不影響以前的版本使用.
        

    【位向量類】

      標志位位串是一個在接收序列的時候特別是類似UDP數據包的時候經常用到的, 表示第幾個數據包已經接收, 未接收等. 如果使用一個int, unsigned char...的數組有時候顯然效率不高, 資源浪費. 所以使用位串最好, 因為使用位操作效率較高, 而位串占用內存也較少.


	// Flags.h: interface for the CFlags class.
	//
	//////////////////////////////////////////////////////////////////////

	#if !defined(AFX_FLAGS_H__0FCB90C7_E5D7_4764_A16A_82B84BA310D9__INCLUDED_)
	#define AFX_FLAGS_H__0FCB90C7_E5D7_4764_A16A_82B84BA310D9__INCLUDED_

	#if _MSC_VER > 1000
	#pragma once
	#endif // _MSC_VER > 1000

	#include "stdio.h"
	#include "string.h"
	#include "assert.h"

	#define FALSE 0
	#define TRUE  1

	#define FSIZE 100

	class CFlags  
	{
	private:
		unsigned char	f[FSIZE];

	public:
		CFlags();
		virtual ~CFlags();

		void set( int i);
		void clear( int i);
		int  read( int i );
		int  size();
	};


	#endif // !defined(AFX_FLAGS_H__0FCB90C7_E5D7_4764_A16A_82B84BA310D9__INCLUDED_)



	// Flags.cpp: implementation of the CFlags class.
	//
	//////////////////////////////////////////////////////////////////////

	#include "stdafx.h"
	#include "Flags.h"

	//////////////////////////////////////////////////////////////////////
	// Construction/Destruction
	//////////////////////////////////////////////////////////////////////

	CFlags::CFlags()
	{
		memset( f, FALSE, FSIZE );
	}

	CFlags::~CFlags()
	{

	}

	void CFlags::set( int i )
	{
		assert( i>=0 && i<FSIZE );
		f[i] = TRUE;
	}

	void CFlags::clear( int i )
	{
		assert( i>=0 && i<FSIZE );
		f[i] = FALSE;
	}

	int  CFlags::read( int i )
	{
		assert( i>=0 && i<FSIZE );
		return f[i];
	}

	int  CFlags::size()
	{
		return FSIZE;
	}


	//BitVector.h
	#ifndef BITVECT_H
	#define BITVECT_H

	class CBitVector{
		unsigned char*	bytes;
		int Bits, numBytes;
	public:
		CBitVector();
		CBitVector( unsigned char* init, int size=8 );
		CBitVector( char* binary );
		~CBitVector();
		void set( int bit );
		void clear( int bit );
		int read( int bit );
		int bits();
		void bits( int sz );
		void print( const char* msg="" );
	};

	#endif//BITVECT_H


	//BitVector.cpp
	#include "stdafx.h"
	#include "bitvector.h"

	#include "stdio.h"
	#include "assert.h"
	#include "stdlib.h"
	#include "string.h"
	#include "limits.h"

	//描述: 獲得一個只有字節長度最高位1的一個無符號字節的掩碼
	const unsigned char highbit = 1 << (CHAR_BIT - 1);

	//將所有變量賦值0
	CBitVector::CBitVector()
	{
		numBytes = 0;
	}

	//描述: 分配內存并初始化位數
	CBitVector::CBitVector( unsigned char* init, int size )
	{
		//設置字節數
		numBytes = size;
		//設置比特位數
		Bits = numBytes * CHAR_BIT;
		
		//根據字節數分配一個元素長度為1字節, 個數為字節數的數組
		bytes = ( unsigned char* )calloc( numBytes, 1 );
		assert( bytes );
		
		//如果指針空直接返回
		if ( init==0 ) return;

		//按比特位賦值
		for( int index=0; index<numBytes; index++ ){
			for( int offset=0; offset<CHAR_BIT; offset++ ){
				set( index * CHAR_BIT + offset );
			}
		}
	}

	//描述: 將一個2進制0,1序列轉換成為BitVector
	CBitVector::CBitVector( char* binary )
	{
		//獲得比特位數和對應字節數, 這里輸入的binary使用整整一個字節代表一個比特位
		Bits = strlen( binary );
		numBytes = Bits/CHAR_BIT;

		if ( Bits%CHAR_BIT ) 
			numBytes++;

		//分配內存并且按位賦值
		bytes = ( unsigned char* )calloc( numBytes,1 );
		assert( bytes );
		for( int i=0; i<Bits; i++ ){
			if ( binary[i] == '1' )
				set(i);
		}
	}

	//描述: 釋放內存
	CBitVector::~CBitVector()
	{
		free( bytes );
	}

	//描述: 按位賦值
	void CBitVector::set( int bit )
	{
		assert( bit>=0 && bit<Bits );
		int index=bit/CHAR_BIT;
		int offset = bit%CHAR_BIT;
		unsigned char mask = ( 1<<offset );
		bytes[index]|=mask;
	}

	//描述: 獲得指定比特位的賦值
	int CBitVector::read( int bit )
	{
		assert( bit>=0 && bit<Bits );
		int index=bit/CHAR_BIT;
		int offset = bit%CHAR_BIT;
		unsigned char mask = ( 1<<offset );
		return bytes[index]&mask;
	}

	//描述: 清除指定位的值
	void CBitVector::clear( int bit )
	{
		assert( bit >= 0 && bit < Bits );
		int index=bit/CHAR_BIT;
		int offset = bit%CHAR_BIT;
		unsigned char mask = ( 1<<offset );
		bytes[index]&=mask;
	}

	//描述: 得到比特位數
	int CBitVector::bits()
	{
		return Bits;
	}

	void CBitVector::bits( int sz )
	{
		int oldsize = Bits;
		Bits = sz;
		numBytes = Bits/CHAR_BIT;
		if ( Bits%CHAR_BIT )
			numBytes ++;

		void* v = realloc( bytes, numBytes );
		assert(v);

		bytes = (unsigned char*) v;

		for ( int i=oldsize; i<Bits; i++ )
			clear( i );
	}

	//描述: 打印信息
	void CBitVector::print( const char *msg )
	{
		puts( msg );
		for ( int i=0; i<Bits; i++ )
		{
			if ( read(1) )
				putchar( '1' );
			else
				putchar( '0' );

			if ( ( i + 1 ) % CHAR_BIT == 0 )
				putchar( ' ' );
		}
		putchar( '\n' );
	}

	// ch5_flags.cpp : Defines the entry point for the console application.
	//

	#include "stdafx.h"
	#include "flags.h"
	#include "bitvector.h"

	int main(int argc, char* argv[])
	{
		CFlags fl;

		printf("%s\n", "演示一個使用字節數組的位串");
		for( int i=0; i<fl.size(); i++ ){
			if ( i%3==0 )
				fl.set(i);
		}

		for( int j=0; j<fl.size(); j++ ){
			printf( "fl.read(%d)=%d\n", j, fl.read(j) );
		}

		printf("%s\n", "演示一個使用位串向量的位串");
		unsigned char b[] = { 0x0f, 0xff, 0xf0, 0xAA, 0x78, 0x11 };
		CBitVector	bv1( b, sizeof(b)/sizeof(*b) ),
			bv2( "10010100111100101010001010010010101" );
		bv1.print( "bv1 after modification" );
		bv2.print( "bv2 before modification" );

		for( j=bv2.bits() - 10; j<bv2.bits(); j++ )
			bv2.clear( j );

		bv2.set(30);
		bv2.print( "bv2 after modification" );
		bv2.bits( bv2.bits()/2 );
		bv2.print( "bv2 cut in half" );
		bv2.bits( bv2.bits() + 10 );
		bv2.print( "bv2 grown by 10" );
		
		CBitVector	bv3( (unsigned char*)0 );
		return 0;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线免费看| 欧美一级艳片视频免费观看| 色嗨嗨av一区二区三区| 日韩一级精品视频在线观看| 中文字幕中文字幕一区| 日本vs亚洲vs韩国一区三区 | 蜜桃av一区二区在线观看| 国内精品免费**视频| 色婷婷综合久久久中文一区二区| 蜜臀99久久精品久久久久久软件| 男男视频亚洲欧美| 成人av午夜影院| 日韩欧美国产一区二区三区| 一区二区三区欧美亚洲| 国产高清无密码一区二区三区| 欧美成人三级电影在线| 亚洲天堂a在线| 国产精品1024| 91精品国产入口| 亚洲已满18点击进入久久| 成人福利电影精品一区二区在线观看 | 色综合久久久久综合99| 欧美一区二区观看视频| 亚洲一区二区偷拍精品| 国产suv一区二区三区88区| 日韩一区二区在线观看视频播放| 亚洲男人电影天堂| 99久久精品情趣| 香蕉久久一区二区不卡无毒影院| 麻豆成人久久精品二区三区红| 在线观看一区日韩| 亚洲丝袜美腿综合| 成人视屏免费看| 亚洲国产经典视频| 丁香另类激情小说| 国产精品少妇自拍| 成人动漫一区二区| 综合分类小说区另类春色亚洲小说欧美 | 日韩一区二区在线观看| 亚洲乱码日产精品bd| 97精品久久久久中文字幕 | 欧美午夜一区二区三区免费大片| ㊣最新国产の精品bt伙计久久| 国产自产v一区二区三区c| 精品成人一区二区三区| 国产乱码精品一区二区三区忘忧草 | 精品日韩欧美一区二区| 国产精品拍天天在线| 国产精品1区二区.| 久久久久亚洲蜜桃| 国产 日韩 欧美大片| 国产精品午夜春色av| av电影天堂一区二区在线| 亚洲色图一区二区三区| 色999日韩国产欧美一区二区| 日本一区二区成人| 一本大道av一区二区在线播放| 一区二区三区中文字幕电影| 欧美日韩综合一区| 中文字幕一区二区视频| 成人av午夜电影| 亚洲国产视频直播| 精品欧美久久久| 丁香六月久久综合狠狠色| 亚洲另类在线视频| 6080亚洲精品一区二区| 国产一区二区免费看| 亚洲天堂精品在线观看| 欧美日韩在线播放| 国产电影一区在线| 一区二区免费在线| xf在线a精品一区二区视频网站| 不卡的电视剧免费网站有什么| 亚洲国产一二三| 久久伊99综合婷婷久久伊| 91片黄在线观看| 久久成人精品无人区| 亚洲欧美一区二区三区久本道91| 在线播放91灌醉迷j高跟美女 | 91视频91自| 强制捆绑调教一区二区| 国产精品高潮呻吟久久| 欧美猛男超大videosgay| 国产福利一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 精品日韩在线观看| 欧美体内she精高潮| 成人激情小说网站| 卡一卡二国产精品 | 91精品国产乱码| 粉嫩嫩av羞羞动漫久久久| 亚洲午夜精品在线| 中文一区一区三区高中清不卡| 欧美顶级少妇做爰| 一本色道a无线码一区v| 国产精品资源在线观看| 日韩中文字幕一区二区三区| 亚洲精品亚洲人成人网在线播放| 亚洲精品一线二线三线| 欧美精品 日韩| 91成人在线精品| aaa欧美大片| 国产精品中文字幕欧美| 捆绑紧缚一区二区三区视频| 亚洲国产成人av| 亚洲欧洲综合另类| 国产精品美女久久久久aⅴ | 成+人+亚洲+综合天堂| 久久国产剧场电影| 日韩精品久久理论片| 亚洲综合自拍偷拍| 亚洲男人的天堂网| 亚洲欧美日韩在线| 一区在线观看免费| 中文字幕一区二区三区不卡| 欧美国产乱子伦| 国产精品免费免费| 国产精品网站在线| 国产精品视频在线看| 国产欧美va欧美不卡在线| 久久综合九色综合97婷婷女人| 欧美一级黄色录像| 精品美女一区二区| 2020国产精品久久精品美国| 精品免费日韩av| 久久久久久久久一| 久久久99久久| 中文字幕免费观看一区| 亚洲欧美综合网| 亚洲影院免费观看| 日本麻豆一区二区三区视频| 日本中文字幕一区二区视频| 美女在线一区二区| 国产综合色产在线精品 | 日韩和欧美一区二区三区| 婷婷丁香激情综合| 蜜臀久久99精品久久久久宅男 | 欧美日高清视频| 日韩午夜在线观看视频| 久久午夜老司机| 国产精品久久久久久久久图文区| 亚洲视频免费在线观看| 亚洲va欧美va天堂v国产综合| 日本不卡视频一二三区| 国产乱一区二区| 91蜜桃传媒精品久久久一区二区| 欧美日韩中文字幕一区二区| 日韩三级中文字幕| 国产精品高潮久久久久无| 亚洲成人av福利| 国产伦精品一区二区三区免费迷 | 亚洲午夜电影在线观看| 日韩二区在线观看| 国产高清在线精品| 欧美日韩高清影院| 国产色综合久久| 午夜精品aaa| 成人免费高清视频在线观看| 欧美视频在线观看一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲欧洲日本在线| 日本午夜一区二区| 色综合色综合色综合色综合色综合| 88在线观看91蜜桃国自产| 国产视频一区在线观看| 亚洲国产成人tv| 成人动漫视频在线| 精品女同一区二区| 亚洲福利国产精品| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 91视视频在线观看入口直接观看www| 91成人免费网站| 久久久影视传媒| 欧美aaa在线| 日本久久电影网| 日本一区二区免费在线观看视频| 日本美女视频一区二区| av中文字幕不卡| 久久久久青草大香线综合精品| 视频一区中文字幕| 在线这里只有精品| 亚洲欧洲日产国码二区| 国产精品一区二区91| 正在播放亚洲一区| 亚洲国产综合色| 色婷婷精品久久二区二区蜜臀av | 亚洲一级二级三级在线免费观看| 床上的激情91.| 久久亚洲免费视频| 日本v片在线高清不卡在线观看| 欧美在线免费播放| 亚洲免费毛片网站| 99精品在线观看视频| 亚洲国产精品高清| 国产高清久久久久| 国产欧美中文在线| 国产精品性做久久久久久| 久久久另类综合| 国产99久久久精品| 国产精品乱码人人做人人爱|