C++ 构造函数总结
来源:互联网 发布:北京航空学院网络教育 编辑:程序博客网 时间:2024/05/17 17:45
C++提供了构造函数来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,构造函数不需要用户来调用它,而是建立对象时自动执行。
构造函数的名字必须与类名相同,构造函数不具有任何类型,不返回任何值(与void类型不同,不是返回空,而是没有返回值)。
1.无参数的构造函数
#include <iostream>using namespace std;class Time{public : Time() { hour = 0; minute = 0; sec = 0; } void showtime();private: int hour; int minute; int sec;};void Time::showtime(){ cout<<"hour:"<<hour<<"min:"<<minute<<"sec:"<<sec<<endl;} int main() { Time time; time.showtime(); getchar(); return 0; }
由上述程序可以看到:
1.在类中定义了构造函数,函数的名字与类名时相同的,并利用这个构造函数对对象中的数据初始化。
2.那么程序在哪里调用了构造函数?在26行,实例化了一个类的对象,代码在执行26行时完成7-12行的内容。
3.构造函数除了可以定义在类内,还可以定义在类外,注意要先在类内声明,如下:
#include <iostream>using namespace std;class Time{public : Time(); void showtime();private: int hour; int minute; int sec;};void Time::showtime(){ cout<<"hour:"<<hour<<endl<<"min:"<<minute<<endl<<"sec:"<<sec<<endl;}Time::Time(){ hour = 0; minute = 0; sec = 0;} int main() { Time time; time.showtime(); getchar(); return 0; }
代码中第7行为声明,第18-23行为构造函数的定义。
运行结果:
hour:0
minute:0
sec:0
2.带参数的构造函数
带参数的构造函数可以在实例化的时候传入不同的参数,让不同的对象具有不同的初值。
#include <iostream>using namespace std;class Time{public : Time(int,int,int); void showtime();private: int hour; int minute; int sec;};void Time::showtime(){ cout<<"hour:"<<hour<<endl<<"min:"<<minute<<endl<<"sec:"<<sec<<endl;}Time::Time(int h,int m,int s){ hour = h; minute = m; sec = s;} int main() { Time time(1,2,3); time.showtime(); getchar(); return 0; }
相比于上一个程序,只需要修改一部分就可以完成带参数的构造函数声明与定义:在7行的声明中带参数,在18-23行的定义中对类中的变量根据形参赋值,在26行的实例化中传入实参。
运行结果:
hour:1
minute:2
sec:3
3.构造函数的重载
在一个类中可以定义多个构造函数,以便为对象提供不同的初始化方法,供用户选择。这些构造函数具有相同的名字,而参数的个数或参数的类型不同。这称为构造函数的重载。
#include <iostream>using namespace std;class Time{public : Time(); Time(int,int,int); void showtime();private: int hour; int minute; int sec;};void Time::showtime(){ cout<<"hour:"<<hour<<endl<<"min:"<<minute<<endl<<"sec:"<<sec<<endl;}Time::Time(){ hour = 0; minute = 0; sec = 0;}Time::Time(int h,int m,int s){ hour = h; minute = m; sec = s;} int main() { Time time1(1,2,3); time1.showtime(); Time time2; time2.showtime(); getchar(); return 0; }
以上代码只是将1,2组合,在8,9行声明了两个构造函数,它们的名字时相同的(就是类的名字,也没办法不相同啊,呵呵),在程序的19-24,25-30行定义函数。第33行代码调用带参数的构造函数,第35行调用无参数的构造函数,系统根据构造函数的参数的个数和类型确定调用哪个构造函数。
运行结果:
hour:1
minute:2
sec:3
hour:0
minute:0
sec:0
构造函数的默认值
构造函数中参数的值既可以通过实参传递,也可以指定某些值的默认值,即如果用户不指定实参值,编译系统就使用默认值。
#include <iostream>using namespace std;class Time{public : Time(int h =2,int m=2,int s=2); void showtime();private: int hour; int minute; int sec;};void Time::showtime(){ cout<<"hour:"<<hour<<endl<<"min:"<<minute<<endl<<"sec:"<<sec<<endl;}Time::Time(int h,int m,int s){ hour = h; minute = m; sec = s;} int main() { Time time1(1,2,3); time1.showtime(); getchar(); return 0; }
第7行声明带参数的构造函数时给参数赋初值,在18-23行定义构造函数时根据实参赋值,如果没有指定形参对应的实参,系统将采用默认值。
Time time1(1,2,3);
运行结果:
hour:1
minute:2
sec:3
Time time1;
运行结果:
hour:2
minute:2
sec:2
Time time1(1);
运行结果:
hour:1
minute:2
sec:2
Time time1(3,3);
运行结果:
hour:3
minute:3
sec:2
- c++构造函数总结
- 拷贝构造函数总结
- 复制构造函数总结
- 构造函数注意事项总结
- 复制构造函数总结
- 复制构造函数总结
- 构造函数规则总结
- c# 构造函数总结:
- C++构造函数总结
- C++ 构造函数总结
- 【C++】拷贝构造函数
- C#:静态构造函数
- C++:拷贝构造函数
- explicit构造函数(C++)
- C++:关于构造函数
- C++-构造函数
- C++String构造函数
- c++-转换构造函数
- postgresql 弱口令检测
- mybatis架构
- 山大场馆管理系统 开发日志1
- 2. FFmpeg 编译 for Android
- python实例1--获取序列名称和序列
- C++ 构造函数总结
- 动态界面:DSL&布局引擎
- 相邻兄弟选择器(+)
- C#RSA非对称加密算法/数字签名算法
- ECG曲率计算,曲线拟合(还没写完)
- dedecms列表页调用多张图片
- Js下Image.src的坑
- 略过 Mysql 5.7的密码策略
- 学习云计算从哪里入手?