鱼C论坛

 找回密码
 立即注册
查看: 1177|回复: 4

[技术交流] 003 - 类和对象(class & object)② 构造函数(Constructor Functions)

[复制链接]
发表于 2020-4-18 21:45:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 liuzhengyuan 于 2020-5-8 17:10 编辑

我的 C++ 自学心得 | 003 - 类和对象(class & object)② 结构函数(Constructor Functions)





0,构造函数
什么是构造函数?
它里面的程序是在我们创建对象时进行的。

如何做构造函数?
代码
这个代码(在下方)中
  1. Book() {
  2. }
复制代码

就是一个构造函数

它里面的程序是在我们创建对象时进行的,且这段程序创建了两个对象
所以它会输出两次 "creating object..."
  1. #include<bits/stdc++.h>
  2. using namespace std;

  3. class Book {
  4.         public:
  5.                 string name;
  6.                 string author;
  7.                 int pages;
  8.         //构造函数!!!
  9.         Book() {
  10.                 cout<<"creating object..."<<endl;
  11.         }
  12. };

  13. int main()
  14. {        
  15.         Book b1;
  16.         b1.name="Harry Potter";
  17.         b1.author="JK";
  18.         b1.pages=500;
  19.         
  20.         Book b2;
  21.         b2.name="lingjichu";
  22.         b2.author="xiaojiayu";
  23.         b2.pages=600;
  24.         
  25.         return 0;
  26. }
复制代码

效果:
  1. creating object...
  2. creating object...
复制代码


更多玩法
它还能有参数
这次的代码(在下方)有 2 处重点了
  1. Book b1("感谢 小甲鱼");
  2. Book b2("感谢 鱼C论坛");
复制代码
这个括号里的内容就是参数↑

而且 Book 函数的程序就是让参数输出↓
  1. Book(string temp) {
  2.         cout<<temp<<endl;
  3. }
复制代码


这样,屏幕就会显示 “感谢 小甲鱼,感谢 鱼C论坛” 的字样了
(DEV-C++ 支持中文)
  1. #include<bits/stdc++.h>
  2. using namespace std;

  3. class Book {
  4.         public:
  5.                 string name;
  6.                 string author;
  7.                 int pages;
  8.         Book(string temp) {
  9.                 cout<<temp<<endl;
  10.         }
  11. };

  12. int main()
  13. {
  14.         Book b1("感谢 小甲鱼");
  15.         b1.name="Harry Potter";
  16.         b1.author="JK";
  17.         b1.pages=500;
  18.         
  19.         Book b2("感谢 鱼C论坛");
  20.         b2.name="lingjichu";
  21.         b2.author="xiaojiayu";
  22.         b2.pages=600;
  23.         
  24.         return 0;
  25. }
复制代码

效果
  1. 感谢 小甲鱼
  2. 感谢 鱼C论坛
复制代码





如果我要用普通的方法创建4各和上方一样关于书本的对象,并赋值

就要花 4 * 4 = 16 行,

如果我想创建 20 个,并赋值

就要花 20 * 4 = 80 行,

那如果 100 个,300 个呢?

300 * 4 = 1200 行、

如何使用更少的行数,创建更多的对象并赋值呢?

上结构函数的代码
  1. Book(string a_name, string a_author, int a_pages) {
  2.         name=a_name;
  3.         author=a_author;
  4.         pages=a_pages;
  5. }
复制代码

很简单

程序定义了 3 个参数

以后我们想要赋值就直接:
  1. Book b1("Harry Potter", "JK", 500);
  2. Book b2("lingjichu", "xiaojiayu", 600);
复制代码

整整少了 3 行

再试试输出:
  1.        
  2. cout<<b1.name<<endl;
  3. cout<<b2.pages<<endl;
复制代码

效果:
  1. Harry Potter
  2. 600
复制代码





还可以定义两个
,第一个函数会在没有任何参数的时候执行:
  1. #include<bits/stdc++.h>
  2. using namespace std;

  3. class Book {
  4.         public:
  5.                 string name;
  6.                 string author;
  7.                 int pages;
  8.                
  9.         Book() {
  10.                 name="No name";
  11.                 author="No author";
  12.                 pages=0;
  13.         }
  14.                
  15.         Book(string a_name, string a_author, int a_pages) {
  16.                 name=a_name;
  17.                 author=a_author;
  18.                 pages=a_pages;
  19.         }
  20. };

  21. int main()
  22. {
  23.         Book b1;
  24.        
  25.         cout<<b1.name<<endl;
  26.         cout<<b1.pages<<endl;
  27.        
  28.         return 0;
  29. }
复制代码

效果:
  1. No name
  2. 0
复制代码


结束啦



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-19 17:10:21 | 显示全部楼层
我估计类和对象这一系列要更新到 ④
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-19 18:20:24 | 显示全部楼层
constructor functions 构造函数

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
liuzhengyuan + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 08:35:14 | 显示全部楼层
本帖最后由 liuzhengyuan 于 2020-5-8 16:05 编辑
2技能封走位 发表于 2020-4-19 18:20
constructor functions 构造函数


感谢指出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 08:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表