?? c++編程思想 -- 第2章 筆記(5).txt
字號:
作者:rick1126
email: rickzhang@sina.com
日期:2001-7-18 9:45:25
2.9 頭文件形式
【頭文件在C++的重要性】
. 頭文件用來放置專門的信息 -- 聲明
. C++ 不允許在沒有聲明就直接實現(xiàn)
. 頭文件是庫的開發(fā)者和用戶之間的合同, 該合同描述數(shù)據(jù)結(jié)構(gòu), 說明函數(shù)的參數(shù)和返回值. 包括類成員.
. C++ 要求強(qiáng)制執(zhí)行該合同
【頭文件需要解決的問題】
. 將什么置于頭文件 -- 聲明和部分實現(xiàn)
. 重復(fù)聲明問題
#ifndef ...
#define ...
...
#endif//...
【項目使用頭文件】
. 模塊頭文件通常用以存放項目范圍有效的數(shù)據(jù)結(jié)構(gòu)和系統(tǒng)過程聲明
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.10 嵌套結(jié)構(gòu)
【棧數(shù)據(jù)結(jié)構(gòu)模擬】
. 其實規(guī)定棧元素嵌套在棧結(jié)構(gòu)內(nèi)部, 很好的將相關(guān)數(shù)據(jù)"圈地"起來, 放置了過分使用公共名字空間, 也更符合邏輯
. 操作符::就可以表示范圍, 沒有任何前綴就表示全局空間, 否則一般C++總是自動匹配最近活動范圍
【相關(guān)代碼】
. 其實這都是書上的, 我就替大家抄了.
//nested.h
#ifndef NESTED_H_200107180917
#define NESTED_H_200107180917
struct stack{
struct link{
void* data;
link* next;
void initialize( void* Data, link* Next );
}*head;
void initialize( );
void push( void* Data );
void* peek( );
void* pop( );
void cleanup( );
};
#endif//NESTED_H_200107180917
// nested.cpp
#include "stdafx.h"
#include "stdlib.h"
#include "assert.h"
#include "nested.h"
void stack::link::initialize( void* Data, link* Next )
{
data = Data;
next = Next;
}
void stack::initialize( ) { head = 0; }
void stack::push( void* Data )
{
link* newlink = ( link* )malloc( sizeof( link ) );
assert( newlink );
newlink->initialize( Data, head );
head = newlink;
}
void* stack::peek( ) { return head->data; }
void* stack::pop( )
{
if ( head==0 ) return 0;
void* result = head->data;
link* oldHead = head;
head = head->next;
free( oldHead );
return result;
}
void stack::cleanup( )
{
link* cursor = head;
while ( head ){
cursor = cursor->next;
free( head->data );
free( head );
head = cursor;
}
}
// ch2_stack.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "nested.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "assert.h"
#define BUFFERSIZE 100
int main(int argc, char* argv[])
{
stack textlines;
FILE* file;
char* s;
char buf[BUFFERSIZE];
assert( argc == 2 );
textlines.initialize( );
file = fopen( argv[1], "r" );
assert( file );
while ( fgets( buf, BUFFERSIZE, file ) ){
char* string = (char*)malloc(strlen(buf) + 1 );
assert( string );
strcpy( string, buf );
textlines.push( string );
}
while ( ( s=(char*)textlines.pop() )!=0 ){
printf( "%s", s );
free ( s );
}
textlines.cleanup();
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -