【C++】抽象和类(2)--如何实现类成员函数?

举报
王博Kings 发表于 2020/12/30 00:05:56 2020/12/30
【摘要】 目录 1 实现类成员函数 成员函数的定义有两个特殊的特征 类方法的完整 名称包括类名 类方法可以直接 访问私有成员!!! 2 代码示例 stock00.h stock00.cpp 3. 代码解析 3.1 成员函数说明  3.2 内联方法 3.3 方法使用哪个对象? 请大家回顾第一讲: 【C++】抽象和类(1)--OOP编程特性、类规范基本组成、接口...

目录

1 实现类成员函数

成员函数的定义有两个特殊的特征

类方法的完整 名称包括类名

类方法可以直接 访问私有成员!!!

2 代码示例

stock00.h

stock00.cpp

3. 代码解析

3.1 成员函数说明 

3.2 内联方法

3.3 方法使用哪个对象?


请大家回顾第一讲:

【C++】抽象和类(1)--OOP编程特性、类规范基本组成、接口是什么、类与结构的区别

 1 实现类成员函数

成员函数的定义有两个特殊的特征

  • 定义成员函数时,使用作用域解析运算符(::)标识所属的类
  • 类方法可以访问类的private组件

不同类下面的成员函数名字可以一样!

void Stock:: update (double price)

void Buffoon:: update() 

作用域解析运算符确定了方法定义对应的类的身份

  

Stock中的其他函数不必使用::就可以使用update(),因为他们是一个类里,是可见的

类方法的完整 名称包括类名

Stock::update()是函数的限定名

update() 是全名的缩写

类方法可以直接 访问私有成员!!!


  
  1. void Stock::show()
  2. {
  3. std::cout << "Company: " << company
  4. << " Shares: " << shares << "\n"
  5. << " Share Price: $ " << share_val
  6. << "Total Worth: $" << total_val << "\n";
  7. }

2 代码示例

stock00.h


  
  1. // stock00.h -- Stock class interface
  2. // 版本 00 类的声明
  3. #ifndef STOCK00_H_
  4. #define STOCK00_H_
  5. #include<string>
  6. class Stock
  7. {
  8. public:
  9. void acquire(const std::string & co, long n, double pr);
  10. void buy(long num, double price);
  11. void sell(long num, double price);
  12. void update(double price);
  13. void show();
  14. private:
  15. std::string company;
  16. long shares; //股票数量
  17. double share_val; // 每股的价格
  18. double total_val; //股票的总价格
  19. void set_tot()
  20. {
  21. total_val = shares*share_val;
  22. }
  23. };
  24. #endif

stock00.cpp


  
  1. // stock00.cpp -- 对类stock00.h进行函数描述
  2. // 版本还是00
  3. #include<iostream>
  4. #include"stock00.h"
  5. void Stock::acquire(const std::string & co, long n, double pr)
  6. {
  7. company = co;
  8. if (n < 0)
  9. {
  10. std::cout << "股票数量不能设置为0; "
  11. << company << " shares set to 0. \n";
  12. shares = 0;
  13. }
  14. else
  15. {
  16. shares = n;
  17. }
  18. share_val = pr;
  19. set_tot();
  20. }
  21. void Stock::buy(long num, double price)
  22. {
  23. if (num < 0)
  24. {
  25. std::cout << "股票购买数量不能是负数。" << "交易被终止了!!\n";
  26. }
  27. else
  28. {
  29. shares += num;
  30. share_val = price;
  31. set_tot();
  32. }
  33. }
  34. void Stock::sell(long num, double price)
  35. {
  36. using std::cout;
  37. if (num < 0)
  38. {
  39. cout << "股票不能卖负数,你脑筋有问题?" << "中断交易了";
  40. }
  41. else if (num>shares)
  42. {
  43. cout << "你自己有几个股票不清楚吗?你能卖比自己持有还多的股票吗?!" << "交易终止!!!";
  44. }
  45. else
  46. {
  47. shares -= num;
  48. share_val = price;
  49. set_tot();
  50. }
  51. }
  52. void Stock::update(double price)
  53. {
  54. share_val = price;
  55. set_tot();
  56. }
  57. void Stock::show()
  58. {
  59. std::cout << "Company: " << company
  60. << " Shares: " << shares << "\n"
  61. << " Share Price: $ " << share_val
  62. << "Total Worth: $" << total_val << "\n";
  63. }

3. 代码解析

3.1 成员函数说明 

3.2 内联方法

定义位于类声明中的函数都将自动成为内联函数,Stock::set_tot是一个内联函数。

类声明常将短小的成员函数作为内联函数。

如果愿意,可以在类声明外定义成员函数,成为内联函数。需要使用inline


  
  1. class Stock
  2. {
  3. private:
  4. ...
  5. void set_tot(); //类声明外面定义成员函数
  6. public:
  7. ...
  8. };
  9. inline void Stock::set_tot() //使用内联函数
  10. {
  11. total_val = shares * share_val;
  12. }

3.3 方法使用哪个对象?

 

 

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/98037240

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。