第十三章 名稱空間(Namespace) 與 轉換函數與其他主題

Slides:



Advertisements
Similar presentations
C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
Advertisements

第一單元 建立java 程式.
計算機程式語言實習課.
第 2 章 初探 C++.
四資二甲 第三週作業 物件導向程式設計.
第一章 C语言概述 计算机公共教学部.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
C++入門 以Dev C++為例.
File Access 井民全製作.
C++程序设计 王希 图书馆三楼办公室.
Using C++ The Weird Way Something about c++11 & OOP tricks
C語言中可變参數的用法——va_list、va_start、va_arg、va_end参數定義
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
Visual C++ introduction
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
Scope & Lifetime 前言 Local Scope Global Functions & Objects
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
第八﹑九章 I/O系統 檔案I/O的基本概念 格式化I/O 建立自訂的嵌入子 建立自訂的擷取子 自訂I/O與檔案.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Function.
Object-Oriented Programming in C++ 第一章 C++的初步知识
程序设计期末复习 黎金宁
第三章 C++中的C 面向对象程序设计(C++).
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
程式撰寫流程.
類別(class) 類別class與物件object.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
C++语言程序设计 第十一章 流类库与输入/输出.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
$10 可空类型.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
程式設計實習課(四) ----C 函數運用----
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
第一單元 建立java 程式.
第十三讲 文件流与 输出输入重载.
第14章 输入输出与文件 输入输出是指程序与外部设备交换信息 C++把输入输出看成是一个数据流 输入流:外围设备流向内存的数据
C++面向对象程序设计 谭浩强编著 授课教师:姬广永 QQ: 学习网站:
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
Chapter 2 & Chapter 3.
潘爱民 C++ Overview 潘爱民
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
OOP Recitation Course Speaker: Liu Yu-Jiun Date: 2009/3/25.
Oop8 function函式.
物件導向程式設計 CH2.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
第三章 程序的控制结构 第一节 概述 第二节 if选择结构 第三节 switch语句.
OOP9 類別Class.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
#include <iostream.h>
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++语言程序设计 第十章 C++标准模板库 成都信息工程学院计算机系.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
方法(Method) 函數.
Presentation transcript:

第十三章 名稱空間(Namespace) 與 轉換函數與其他主題

Namespace的宣告 Namespace name{ // declarations } Ex: namespace Mynamespace{ int i,k; void myfunc(int j) {cout<<j;} class myclass { public: void seti(int x) { i=x;} int geti() { return i;} }; }

Namespace的使用 在名稱空間中所宣告的識別字在該名稱 空間內可以直接被使用. 例如MyNamespace 中的return i即是直接使用變數I. 但若您是在名稱空間外要使用該名稱空間所定義的識別字時, 您便需使用作用範圍運算子(scope operator) 以指定您所要使用的名稱空間為何. MyNamespace::I =10;

Namespace的使用 若在程式中常要使用到某一名稱空間的成員時, 若每次要存取該成員時便需指定名稱空間及作用圍範運算子, 然後才跟著所所要使用的成員, 如此便顯得非常麻煩. 因此using敘述便是用來減輕此一負擔, using敘述有以下兩種形式: using namespace name; using name::member;

Namespace的使用 Ex:namespace firstNs{ class demo{ int I; public: demo(int x){I=x;} void seti(int I) {I=x;} int geti() {return I;} }; char str[]=“Illustrating namespace\n” int counter; } Int main() { using namespace firstNs;//方法一 for(counter=10;counter;counter--) cout<<counter<<“”; using firstNs::str; //方法二 cout<<str; }

Namespace的使用 #include<iostream> using namespace std; namespace Demo{ int a; } int x; int b; int main() { using namespace Demo; a=b=x=100; cout<<a<<“”<<b<<“”<<x; return 0; }

練習 改寫成不需使用using namespace std敘述 #include<iostream> #include<fstream> using namespace std; int main(int agrc,char *argv[]) { if(argc!=3){ cout<<“Usage Convert <input> <output>\n”; return 1; } ifstream fin(argv[1]);//open input file ofstream fout(argv[2]);//create output file if(!fout){ cout<<“Cannot open output file\n”; if(!fin){ cout<<“Cannot open input file\n”; return 1; } char ch; fin.unsetf(ios::skipws); while(!fin.eof()){ fin>>ch; if(ch==‘ ’) ch= ‘|’; if(!fin.eof()){ fout<<ch;} fin.close(); fout.close(); return 0;

建立轉換函數 轉換函數將一物件的值轉換成另一與其相容之資料型態 宣告: operator type() { return value;} 轉換函數必需是屬於要做型態轉換的類別中之成員

轉換函數範例 int x,y; public: coord(int i,int j) { x=I;y=j;} class coord { int x,y; public: coord(int i,int j) { x=I;y=j;} operator int() { return x*y;} //轉換函數 }; int main() { coord o1(2,3), o2(4,3); int i; i=o1;//auto convert to integer cout<<i<<‘\n’; i=100+o2;//convert o2 to integer return 0; }

練習 class pwr{ int base; int exp; public: pwr(int b,int e){ base=b;exp=e;} }; 建立一轉換函數將pwr型態的物件轉換成整數型態,並使得傳回值為Baseexp

Class pwr int main() { pwr o1(2,3); o1.show(); int i=o1; #include <math.h> class pwr{ int base; int exp; public: pwr(int b,int e){ base=b;exp=e;} operator int() { return base*exp;} void show(){cout<<pow(base,exp)<<endl;} }; int main() { pwr o1(2,3); o1.show(); int i=o1; cout<<i<<endl; return 0; }

Static 類別成員 當一成員被宣告成為static時, 則無論您建立了多少該類別的物件, 該static成員變數只有一份而已, 每一份物件皆會共亨此一份static變數.事實上static成員變數在任何物件被建立之前就已經存在了

Static 類別成員 當您在一類別中宣告static成員變數時, 您並未定義它.所以您必須使用作用範圍決定運算子(scope resolution operator)指定它所屬的變數,再對該static成員變數定義. static成員函數並不能使用this指標, 而且不允許有虛擬的成員函數.而且static成員函數也不能宣告成const或volatile.

Static範例 #include<iostream> Using namespace std; int main() { class myclass{ static int i; public: void seti(int n){i=n;} int geti() {return i;} }; int myclass::i; int main() { myclass o1,o2; o1.seti(10); cout<<“o1.i:”<<o1.geti()<<‘\n’; cout<<“o2.i:”<<o2.geti()<<‘\n’; return 0; }

Static範例 #include<iostream> Using namespace std; Class myclass{ Public: static int i; void seti(int n){i=n;} int geti() {return i;} }; int myclass::i; int main() { myclass o1,o2; myclass::i=100; cout<<“o1.i:”<<o1.geti()<<‘\n’; cout<<“o2.i:”<<o2.geti()<<‘\n’; return 0; }

練習 試撰寫一程式記錄該類別建立了多少個物件, 當物件產生時在建構子中將該static成員變數加一,反之當物件被消滅時在解建構子中將該static成員變數減一,請實際寫出該程式.

Const成員函數與mutable 類別成員函數宣告成const, 則該函數便不得修改所引用的物件, 而且const成員函數也不得引用其他非const的成員函數. 然而const成員函數可以被const或非const的函數呼叫. 有時候您可能希望一類別中的某些特定成員變數被const成員函數所修改, 而大部份成員變數仍不允許被const成員函數修改, 您便可以使用mutable.

Const範例 #include<iostream> using namespace std; { class demo{ int i; public: int geti() const {return i;} //ok void seti(int x) const {i=x;} //error }; int main() { demo ob; ob.seti(1900); cout<<ob.geti(); return 0; }

Const範例 int main() { demo ob; ob.seti(1900); cout<<ob.geti(); #include<iostream> using namespace std; class demo{ mutable int i; int j; public: int geti() const {returni;}//ok void seti(int x) const {i=x;}//ok void setj(int x) const {j=x;}//error }; int main() { demo ob; ob.seti(1900); cout<<ob.geti(); return 0; }

練習 此為一倒數器程式,當時間符合時發出警告聲,試修改錯誤 #include<iostream> using namespace std; class countdown{ int incr; int target; (mutable) int current; public: countdown(int delay,int i=1){ target=delay; incr=I; current=0; } bool counting() const { current += incr; if(current>= target){ cout<<“\a”; return false; } }; int main() { countdown ob(100,2); while(ob.counting()); return 0;

使用鏈結指定字和asm關鍵字 使用extern “language” function-prototype 在C++中提供兩種重要機制, 使其能方便與其他的程式語言鏈結. 鏈結指定字(link specifier), 它可以讓您的C++程式語言中的function與其他語言鏈結. 使用extern “language” function-prototype 使用asm (“op-code”);

example #include<iostream> using namespace std; extern “C++” int func(int x);//link c function int func(int x) { return x; }

example #include<iostream> using namespace std; { extern “c” int func(int x);//link c function int func(int x) { return x3; } void func() { asm(“mov bp,sp”); asm(“push ax”); asm(“mov c1,4”); }