_C++ Primer Plus_Chap10_Compiler-DevC++_
一、理解书中函数(P.343)
①stock.h_在头文件中定义类
1 #ifndef STOCK00_H_ //ifndef防止双重定义 2 #define STOCK00_H_ 3 4 #include <string> 5 6 class Stock //Stock即新类类型名 7 { 8 private: //使用该类的程序必须通过public成员函数(或友元函数,见chap11)才能访问private部分 9 std::string company; 10 long shares; //股票数量 11 double share_val; //股票价格 12 double total_val; //股票总价 13 void set_tot() {total_val=shares*share_val;} 14 public: //使用该类的程序皆可直接访问public部分 15 void acquire(const std::string & co,long n,double pr); 16 void buy(long num,double price); 17 void sell(long num,double price); 18 void update(double price); 19 void show(); 20 }; //别忘了class花括号后有";" 21 22 #endif 23 24 /*还有第三种访问控制关键字protected,见后续chap13*/
②stock.cpp_类成员函数的实现
1 /***类成员函数的实现***/ 2 /*类成员函数头使用作用域运算符解析(::)来标识归属*/ 3 /*如update()成员函数的函数头:void Stock::update(double price),标识符update()具有类作用域*/ 4 /*这种表示方法意味着可以将另一个累的成员函数命名为同名的update()*/ 5 /*与update()同属一类的其他成员函数可以不经(::)访问它,在类之外使用update()则需要其他措施(待续)*/ 6 /***类的实现***/ 7 8 #include <iostream> 9 #include "stock.h" 10 11 /*aquire管理对某公司股票的首次购买*/ 12 void Stock::acquire(const std::string & co,long n,double pr) 13 { 14 company=co; 15 if(n<0) 16 { 17 std::cout<<"Number of shares can‘t be negative," 18 <<company<<"shares set to 0.\n"; 19 shares=0; 20 } 21 else 22 shares=n; 23 share_val=pr; 24 set_tot(); 25 } 26 27 /*buy和sell管理增加和减少持有的股票*/ 28 void Stock::buy(long num,double price) 29 { 30 if(num<0) 31 { 32 std::cout<<"Number of shares perchased can‘t be negative," 33 <<"Transaction is aborted.\n"; 34 } 35 else 36 { 37 shares+=num; 38 share_val=price; 39 set_tot(); 40 } 41 } 42 43 /*sell管理售出股票*/ 44 void Stock::sell(long num,double price) 45 { 46 using std::cout; 47 if(num<0) 48 { 49 cout<<"Number of shares sold can‘t be negative." 50 <<"Transaction is aborted.\n"; 51 } 52 else if(num>shares) 53 cout<<"You can‘t sell more than you have." 54 <<"Transaction is aborted.\n"; 55 else 56 { 57 shares-=num; 58 share_val=price; 59 set_tot(); 60 } 61 } 62 63 /**/ 64 void Stock::update(double price) 65 { 66 share_val=price; 67 set_tot(); 68 } 69 70 /**/ 71 void Stock::show() 72 { 73 std::cout<<"Company:"<<company 74 <<" Shares:"<<shares<<‘\n‘ 75 <<"Share Price:$"<<share_val 76 <<" Total Worth:$"<<total_val<<‘\n‘; 77 } 78
→注意上述类中一成员函数“set_tot”,在头文件中对其进行了定义,并在之后stock.cpp中的四个其他成员函数中对其进行了调用。这里涉及到内联函数知识:
①对于定义位于类声明中的函数,它们都将自动生成内联函数,Stock::set_tot即是一个内联函数。亦可在类声明外定义内联函数,此时只要在定义时使用inline既定符即可;
②内联函数在编译时不进行真正的调用,编译器将内联函数代码粘贴在调用(形式上称为调用)处,即在每个使用它的地方插入全部算法而不是真正的将函数地址传过去的调用;
③内联函数通常是小内存的函数,其的作用——如上例中的set_tot(),节省了在每个调用它的成员函数中重复输入重置total的公式,有效地节省了时间提高效率。
③usestock.cpp_使用类
1 #include <iostream> 2 #include "stock.h" 3 int main() 4 { 5 Stock mc; 6 mc.acquire("NanoSmart",20,12.50); 7 mc.show(); 8 mc.buy(15,18.125); 9 mc.show(); 10 mc.sell(400,20.00); 11 mc.show(); 12 mc.buy(300000,40.125); 13 mc.show(); 14 mc.sell(300000,0.125); 15 mc.show(); 16 return 0; 17 }
④运行结果
与书本无异。
时间: 2024-10-07 02:12:01