C++类和对象
来源:互联网 发布:大数据 为什么java 编辑:程序博客网 时间:2024/06/08 01:57
一、类和对象
1.C++构造函数
创建一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值。
注意,类的数据成员是不能在声明类时初始化的。如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化。如:
1. class Time
2. {
3. public : //声明为公用成员
4. hour;
5. minute;
6. sec;
7. };
8. Time t1={14,56,30}; //将t1初始化为14:56:30
这种情况和结构体变量的初始化是差不多的,在一个花括号内顺序列出各公用数据成员的值,两个值之间用逗号分隔。但是,如果数据成员是私有的,或者类中有private或protected的成员,就不能用这种方法初始化。
这里的几个例子是用成员函数来对对象中的数据成员赋初值的(例如例8.3中的set_time函数)。从例8.3中可以看到,用户在主函数中调用set_time函数来为数据成员赋值。如果对一个类定义了多个对象,而且类中的数据成员比较多,那么,程序就显得非常臃肿烦琐。
构造函数的作用
为了解决这个问题,C++提供了构造函数(constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。
构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。
【例9.1】在例8.3基础上定义构造成员函数。
1. #include <iostream>
2. using namespace std;
3. class Time
4. {
5. public :
6. Time( )
7. {
8. hour=0;
9. minute=0;
10. sec=0;
11. }
12. void set_time( );
13. void show_time( );
14. private :
15. int hour;
16. int minute;
17. int sec;
18. };
19. void Time::set_time( )
20. {
21. cin>>hour;
22. cin>>minute;
23. cin>>sec;
24. }
25. void Time::show_time( )
26. {
27. cout<<hour<<":"<<minute<<":"<<sec<<endl;
28. }
29. int main( )
30. {
31. Time t1;
32. t1.set_time( );
33. t1.show_time( );
34. Time t2;
35. t2.show_time( );
36. return 0;
37. }
程序运行的情况为:
10 25 54↙ (从键盘输入新值赋给t1的数据成员)
10:25:54 (输出t1的时、分、秒值)
0:0:0 (输出t2的时、分、秒值)
在类中定义了构造函数Time,它和所在的类同名。在建立对象时自动执行构造函数,它的作用是对该对象中的数据成员赋初值0。请不要误认为是在声明类时直接对程序数据成员陚初值(那是不允许的),赋值语句是写在构造函数函数体中的,只有在调用构造函数时才执行这些赋值语句,对当前的对象中的数据成员赋值。
上面是在类内定义构造函数的,也可以只在类内对构造函数进行声明而在类外定义构造函数。将程序中的第4~7行改为下面一行:
Time( ); //对构造函数进行声明
在类外定义构造函数:
1. Time::Time( ) //在类外定义构造成员函数,要加上类名Time和域限定符“::”
2. {
3. hour=0;
4. minute=0;
5. sec=0;
6. }
有关构造函数的使用,有以下说明:
1. 在类对象进入其作用域时调用构造函数。
2. 构造函数没有返回值,因此也不需要在定义构造函数时声明类型,这是它和一般函数的一个重要的不同之点。
3. 构造函数不需用户调用,也不能被用户调用。
4. 在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句。但是一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。
5. 如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。
- c++---类和对象
- C++:类和对象
- 类和对象(C++)
- 【c++】类和对象
- C++:类和对象
- C++:类和对象
- 【C++】类和对象
- [类和对象]-C#OOP
- Objective-C:类和对象
- Objective-C 类和对象
- Objective-C类和对象
- Objective-C-类和对象
- Objective-C类和对象
- Objective-C 类和对象
- C++(类和对象二)
- C++Day03 类和对象
- [C++]类和对象(一)
- C ++教程:类和对象
- linux内核驱动 之 module_init解析 (上)
- reset.css在进行页面开发的时候,我们会对css进行一些初始化的设置与重设
- LeetCode 18. 4Sum
- spring cloud中Ribbon自定义负载均衡策略
- android常见内存泄漏主要有以下几类:
- C++类和对象
- Imax6 使用ltib 启动内核问题Failed to execute /init. Attempting defaults...
- Java 动态代理机制分析(转载)
- 算法之路二:刘汝佳算法竞赛入门经典 3.2开灯问题
- FPGA实现的实时流水线连通域标记算法
- java jsp 报错 Timestamp format must be yyyy-mm-dd hh:mm:ss [.fffffffff]
- 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数
- jsp引入图片路径问题
- Mysql修改存储过程和函数的定义者