[C++]C++学习笔记(二)

(一)基本知识

  1. //stock00.h  
  2. #ifndef STOCK00_H_  
  3. #define STOCK00_H_  
  4.   
  5. #include <string>    
  6.   
  7. class Stock  // class declaration  
  8. {  
  9. private:   
  10.     std::string company;  
  11.     long shares;  
  12.     double share_val;  
  13.     double total_val;  
  14.     void set_tot() { total_val = shares * share_val; }  
  15. public:  
  16.     void acquire(const std::string & co, long n, double pr);  
  17.     void buy(long num, double price);  
  18.     void sell(long num, double price);  
  19.     void update(double price);  
  20.     void show();  
  21. };    // note semicolon at the end  
  22.   
  23. #endif  
  24.   
  25.   
  26.   
  27. #include <iostream>  
  28. #include "stock00.h"  
  29.   
  30. void Stock::acquire(const std::string & co, long n, double pr)  
  31. {  
  32.     company = co;  
  33.     if (n < 0)  
  34.     {  
  35.         std::cout << "Number of shares can't be negative; "  
  36.                   << company << " shares set to 0. ";  
  37.         shares = 0;  
  38.     }  
  39.     else  
  40.         shares = n;  
  41.     share_val = pr;  
  42.     set_tot();  
  43. }  
  44.   
  45. void Stock::buy(long num, double price)  
  46. {  
  47.      if (num < 0)  
  48.     {  
  49.         std::cout << "Number of shares purchased can't be negative. "  
  50.              << "Transaction is aborted. ";  
  51.     }  
  52.     else  
  53.     {  
  54.         shares += num;  
  55.         share_val = price;  
  56.         set_tot();  
  57.     }  
  58. }  
  59.   
  60. void Stock::sell(long num, double price)  
  61. {  
  62.     using std::cout;  
  63.     if (num < 0)  
  64.     {  
  65.         cout << "Number of shares sold can't be negative. "  
  66.              << "Transaction is aborted. ";  
  67.     }  
  68.     else if (num > shares)  
  69.     {  
  70.         cout << "You can't sell more than you have! "  
  71.              << "Transaction is aborted. ";  
  72.     }  
  73.     else  
  74.     {  
  75.         shares -= num;  
  76.         share_val = price;  
  77.         set_tot();  
  78.     }  
  79. }  
  80.   
  81. void Stock::update(double price)  
  82. {  
  83.     share_val = price;  
  84.     set_tot();  
  85. }  
  86.   
  87. void Stock::show()  
  88. {  
  89.     std::cout << "Company: " << company  
  90.               << "  Shares: " << shares << ' '  
  91.               << "  Share Price: $" << share_val  
  92.               << "  Total Worth: $" << total_val << ' ';  
  93. }  


1,类的私有成员变量只能通过类的成员函数去访问,类的成员函数可以通过类对象程序访问
2,声明类对象 
Stack Jack;
类的每个对象都有自己的存储空间,每个对象都有自己的成员变量,但是多个成员变量共享一份成员函数

(二)类的构造函数和析构函数

  1. Stock::Stock(const string &co,long n,double pr )  
  2. {  
  3.     company = co;  
  4.     if (n < 0)  
  5.     {  
  6.         std::cerr<<"can not be negative";  
  7.         shares = 0;  
  8.     }  
  9.     else   
  10.         shares - n;  
  11.     share_val = pr;  
  12.     set_tot()  
  13. }  


构造函数在创建类对象的时候调用,构造函数被用来创建对象,而不能被对象调用
示例:
Stock flood = Stock("hello",4,6.9);
或者 Stock flood("hello",4,6.9);
或者 Stock *pstock = new Stock("hello",4,6.9);
析构函数用来做清理工作

  1. Stock::~Stock()  
  2. {  
  3.       
  4. }  

(三)类对象可以互相赋值

  1. Stock Stock1 =Stock("hello",4,6.9);  
  2. Stock Stock2("welcome",4,6.0);  
  3. Stock2 = Stock1;  

(四)const成员函数 为了保证成员函数不会修改调用的类对象,C++是将const关键字放在函数括号的后面 void show()const;

(五)this指针 const Stock &topval(const Stock &s)const; 括号内的const是指该函数不会修改被显式的访问的对象 最后面的const是指该函数不会修改被隐式的访问的对象 例:top = Stock1.topval(Stock2);  //Stock2被显式访问,Stock1被隐式访问 this指针指向用来调用成员函数的对象,作为隐藏参数传递给函数 示例程序

  1. const Stock &Stock::topval(const Stock &s)const  
  2. {  
  3.     if(s.total_val > total_val)  
  4.     {  
  5.         return s;  
  6.     }  
  7.     else  
  8.     {  
  9.         return *s  
  10.     }  
  11. }  

(六)类作用域 (1)定义作用域为类的常量

  1. class Bakery{  
  2.     const int months = 12;  //出错,因为在声明类的时候类还没有存储空间  
  3.     ....  
  4.     };  

正确的如下:

  1. class Bakery{  
  2.     enum {months = 12};  //出错,因为在声明类的时候类还没有存储空间  
  3.     ....  
  4.     };  
  5. class Bakery{  
  6.     static const int months = 12;  //出错,因为在声明类的时候类还没有存储空间  
  7.     ....  
  8.     };  
原文地址:https://www.cnblogs.com/zhiliao112/p/4069198.html