Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ 构造函数总结

C++ 构造函数总结

作者头像
chaibubble
发布于 2018-01-02 02:22:34
发布于 2018-01-02 02:22:34
1K00
代码可运行
举报
运行总次数:0
代码可运行

C++提供了构造函数来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,构造函数不需要用户来调用它,而是建立对象时自动执行。 构造函数的名字必须与类名相同,构造函数不具有任何类型,不返回任何值(与void类型不同,不是返回空,而是没有返回值)

1.无参数的构造函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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.构造函数除了可以定义在类内,还可以定义在类外,注意要先在类内声明,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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.带参数的构造函数

带参数的构造函数可以在实例化的时候传入不同的参数,让不同的对象具有不同的初值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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.构造函数的重载

在一个类中可以定义多个构造函数,以便为对象提供不同的初始化方法,供用户选择。这些构造函数具有相同的名字,而参数的个数或参数的类型不同。这称为构造函数的重载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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

构造函数的默认值

构造函数中参数的值既可以通过实参传递,也可以指定某些值的默认值,即如果用户不指定实参值,编译系统就使用默认值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++ 静态数据成员与静态成员函数
本文介绍了静态数据成员和静态成员函数的概念、特点以及用法,并给出了一个示例代码。静态数据成员和静态成员函数是C++中比较重要的概念,在开发中经常用到。
chaibubble
2018/01/02
1.7K0
C++中构造函数的作用「建议收藏」
构造函数用于解决类中的对象初始化的问题 构造函数是一类特殊的函数,与其他的成员函数不同的是构造函数构造函数不需要用户来调用它,而是建立对象的时候自动的执行
全栈程序员站长
2022/10/03
1.1K0
【C++】This指针和复制构造函数
在声明一个类的时候,是没有分配存储空间的,只有在真正定义一个对象的时候,程序才会为这个对象分配相应的存储空间。 如果定义了多个对象,这些对象都有自己的存储空间,但是这些对象都是用相同的成员方法的。
谙忆
2021/01/21
1K0
C++带参数的构造函数 | 有参构造函数
在C++中,程序员希望对不同的对象赋予不同的初值,可以采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数, 以实现不同的初始化。
小林C语言
2021/01/28
4.7K0
C++带参数的构造函数 | 有参构造函数
C++之类和对象的使用(一)
  对象的初始化 在声明类时直接对数据成员初始化是错误的!下面的例子时错误的!! class Time{ hour =0; minitu=0; sec=0; } //因为类并不是一个实体,而是一种抽象类型,并不占存储空间,显然无处容纳数据; 如果一个类中的所有成员都是public类型,则可以在定义对象的时候对数据成员初始化。 class Time{ public: hour; minitu; sec; }; Time t1={13,12,40};//类似于结构体初始化成员,但仅限于public数据成员
互联网金融打杂
2018/04/03
7370
C++面向对象程序设计(谭浩强)第三章 怎样使用类和对象 第一节学习笔记
如果数据成员是私有的,或者类中有private或protected的数据成员,就不能用这种方法。
xxxflower
2023/04/16
2620
C++面向对象程序设计(谭浩强)第三章 怎样使用类和对象 第一节学习笔记
c++——构造函数和析构函数
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
lovevivi
2022/12/21
6710
c++——构造函数和析构函数
【C++】C++构造函数和析构函数
C++提供构造函数来处理对象的初始化。 构造函数是一种特殊的成员函数,不需要用户来调用,定义对象时被自动执行。 构造函数名字与类名相同,无返回类型(void也不能有哦)。
谙忆
2021/01/21
7530
C++面向对象程序设计(谭浩强)第三章第10~11节学习笔记
如果在本类以外的其他地方定义了一个函数(这个函数可以说是不属于任何类的非成员函数,也可以是其他类的成员函数),在类体中用friend对其进行声明,此函数就称为本类的友元函数。
xxxflower
2023/04/16
2390
C++面向对象程序设计(谭浩强)第三章第10~11节学习笔记
大学C++课程提炼概括【C++笔记】
如果未写明限制幅(public: private: protected: )则默认为私有
来杯Sherry
2023/05/25
4590
C++查缺补漏
本文总结了几乎所有不易理解或是容易忘记的C++知识,可作为手册查阅,内容参考自清华大学郑莉教授的C++课程。
luxuantao
2021/02/20
2.7K0
C++之类和对象的使用(三)
对象数组 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供。Student stud[3]={90,92,01};//合法 如果构造函数有多个参数,则不能用在定义时直接所提供所有实参的方法。 但可以如下定义: //构造函数有三个参数:学号,年龄,成绩 Student stud[3]{ Student(1000,19,22); Student(1001,19,22); Student(1002,19,22); };   对象指针 指向对象的指针 class Box {public:
互联网金融打杂
2018/04/03
9440
C++之类和对象的使用(三)
C++构造函数的作用_c++什么是构造函数
就是构造函数的作用可以这样理解,如果没有构造函数就是类里边只是声明了成员变量,成员函数,还有最后的对象,这样你在对该对象进行初始化赋值时就比较麻烦就得先调用成员函数对成员变量赋值,成员变量进而作用到对象上,之后有了构造函数,在构建构造函数时直接可以带参数对对象进行初始化,相当于省略了步骤,可以这样简单的理解。
全栈程序员站长
2022/10/29
1.8K0
从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
文章主要讲述了在C++中,拷贝构造函数和赋值运算符的调用顺序,以及临时对象和右值引用的使用情况。具体来说,拷贝构造函数和赋值运算符的调用顺序是:首先调用拷贝构造函数,然后调用赋值运算符。如果一个对象被声明为右值引用,则其拷贝构造函数和赋值运算符会被调用两次。同时,如果一个对象被声明为右值引用,则其拷贝构造函数和赋值运算符会被调用两次。
s1mba
2017/12/28
1.5K0
从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
C/C++开发基础——拷贝构造/移动构造/委托构造
默认情况下的对象复制是将对象的每个成员变量逐个进行复制,可以通过定义拷贝构造函数或重载赋值运算符"operator="来改变默认操作。
Coder-ZZ
2023/12/06
4560
C/C++开发基础——拷贝构造/移动构造/委托构造
C++区别于其他语言的知识点总结
C++是博主的一门限选课,所使用的课本为谭浩强老师的《C++面向对象程序设计》(第二版),这本书内容全面,简单易懂,也强烈推荐给大家(尤其是初学者)。但对于有Java/C#知识的人来说很多地方的讲解略显冗余。这门课的授课老师编程经验丰富,因此可以跳开课本进行更为简洁精确的说明讲解。虽然是只有8周的限选课,博主依然对课堂知识作了记录,这些都是精华所在,即大家所言的老程序员的经验。 (正文字体采用“等线”,最新版win10可以达到最佳显示效果) 1.使用const定义常量 //C语言定义常量 #defin
Steve Wang
2018/02/05
9870
C++基础(五).多态
C++语言是C语言的拓展,C语言是面向过程的,C++在C的基础上增加了面向对象的方法
franket
2021/09/15
7070
C++ 类构造函数&解析函数
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数 constructor,它通过声明一个与 class 同名的函数来定义。当且仅当要生成一个 class 的新的实例 (instance)的时候,也就是当且仅当声明一个新的对象,或给该 class 的一个对象分配内存的时候,这个构造函数将自动被调用。
嵌入式视觉
2022/09/05
1.8K0
C++ 类构造函数&解析函数
认真理一理C++的构造函数
我们在C语言中使用堆栈中的变量时,常常需要给它赋初始值,用于避免使用到了不可预知的值。同样的,在C++中也需要有这样的动作,只是由于C++的对象可能比基本数据要复杂得多,因此使用了一系列的函数来完成这件事。这些函数就是构造函数。那么构造函数到底是怎样,又该如何使用呢?
编程珠玑
2019/08/15
6070
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)
虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。
枫叶丹
2024/06/04
870
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)
推荐阅读
相关推荐
C++ 静态数据成员与静态成员函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验