码迷,mamicode.com
首页 > 编程语言 > 详细

C++构造函数的几种使用方法

时间:2019-09-29 12:38:11      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:而不是   自己   方式   turn   需要   就是   private   class   自动生成   

在C++中,有一种特殊的成员函数,他的名字和类相同,没有返回值,不需要用户显示调用,用户也无法调用,而是在创建对象的时候自动执行。

这种特殊的函数就是构造函数 Constructor

 

构造函数的名字与类相同,所以构造函数与类相依而生。以Color类作为例子:

class Color //Color是类的名称,首字母大写
{ //括号里面是成员变量和成员函数,统称为类的成员Member
public:
    Color(); //声明无参构造函数
    ~Color(); // 析构函数
    Color(int r, int g, int b); // 声明有参构造函数
    void set_color(char r, char g, char b);//成员函数
    void display();
    //void set_color_hsb(char h, char s, char b);
    int color_16();


private:
    int m_red; //类的成员变量一般在前面加 m_//只是变成习惯
    int m_green;
    int m_blue;
    int m_my_color;

};//后面需要一个;

 

一个类必须有构造函数,要么用户自己定义,要么编译器自动生成;

如果用户自己没有定义构造函数,那么编译器会自动生成一个默认的构造函数,只是这个构造函数的函数体是空的,没有形参,也不执行任何操作,

构造函数必须是public 属性的,否则创建对象时无法调用。当然设置为private,protected 属性也不会报错,但是没有意义。

构造函数没有返回值,因为没有变量来接收,这意味着,构造函数函数名前面不能出现返回值类型,void 也不行,函数体内也不能有return。

比如上面Color类,如果不定义构造函数的时候,编译器会生成一个

Color(){}

实际上编译器只有在必要的时候才会生成默认构造函数,而且它的函数体一般不为空

默认构造函数的目的是帮助编译器做初始化工作,而不是帮程序员

1、无参构造函数:构造函数内无形参

Color::Color()
{
    m_red = 0;//初始化成员变量
    m_green = 0;
    m_blue = 0;
}

 

2、有参构造函数:r、g、b 是构造函数的三个形参,

一下通过两种方式定义构造函数 

Color(int r, int g, int b)的作用是给三个private属性的成员变量赋值,要想调用该构造函数,就得在创建对象的同时传递实参,并且实参由()包围,和普通的函数调用类似
在函数体内初始化成员变量
Color::Color(int r, int g, int b) { m_red = r; m_green = g; m_blue = b; }
//在栈上创建3个Color对象,
    Color Red(255, 0, 0);
    Color Green(0, 255, 0);
    Color Blue(0, 0, 255);

 

通过初始化列表来初始化成员变量,在效率上和在构造函数体内初始化变量是一样的,没有优势,仅仅是在书写上方便,尤其是成员变量较多时,这种写法非常简单明了,但鄙人不敢苟同。
Color::Color(int r, int g, int b) : m_red(r), m_green(g), m_blue(b) { }

构造函数初始化列表还有一个重要的作用,初始化const成员,初始化const成员变量的唯一方法就是使用初始化列表

 

C++中构造函数和普通函数一样,允许重载,一个类中有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪个构造函数;

类中定义了构造函数就一定要调用,不调用是错误的。如果有多个重载的构造函数,那么创建对象时提供的实参必须和其中的一个构造函数匹配

 

C++构造函数的几种使用方法

标签:而不是   自己   方式   turn   需要   就是   private   class   自动生成   

原文地址:https://www.cnblogs.com/FZLGYZ/p/11607016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!