C++构造函数怎么用

技术C++构造函数怎么用这篇文章给大家分享的是有关C++构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.作用一种特殊类型的方法,在每次实例化对象时运行2.代码举例2.1 示例1

这篇文章是关于如何使用C构造函数的。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。

00-1010每次实例化对象时运行的一种特殊类型的方法。

1.作用

2.代码举例

#包括牡蛎

classA

{

公众号:

浮动b;

无效打印()

{

std:couta ',' bstd:endl

}

};

intmain()

{

aa;

a . print();

返回1;

}运行结果:

C++构造函数怎么用

当我们实例化A时,系统会为它分配内存。我们不是初始化内存,而是获取原始的内存空间。

当在main中添加STD :3360 cout a.a '时,00-1010,a.b STD : endl

intmain()

{

aa;

std:couta.a '、a . bstd 3360: endl;

a . print();

返回1;

}(vscode under)}(Ubuntu)运行结果:

C++构造函数怎么用

不同的编译器可能不同,有些编译器会编译但不会报告错误(局部变量没有初始化)。原因有待进一步研究…

2.1 示例1:

2.2 示例2:

#包括牡蛎

classA

{

公众号:

浮动b;

a()

{

a=0.0f

b=0.0f

}

无效打印()

n

bsp;      {
            std::cout << a <<  " ,  " << b << std :: endl;
        }
};
int main()
{
    A a;
    std::cout << a.a <<  " ,  " << a.b << std :: endl;
    a.print();
    return 1;
}

结果:

C++构造函数怎么用

3.2 有参数的构造函数

#include <iostream>
class A
{
    public:
        float a, b;
    // 无参构造
    A ()
        {
            a = 0.0f;
            b = 0.0f;
        }
    // 有参构造
        A(float c,float d)
        {
            a = c;
            b = d;
        }
    
        void print()
        {
            std::cout << a <<  " ,  " << b << std :: endl;
        }
};
int main()
{
    A a(5.0,6.0);
    std::cout << a.a <<  " ,  " << a.b << std :: endl;
    a.print();
    return 1;
}

一个类可以有很多构造函数 前提是参数个数不同或者参数类型不同

类似于同名函数(函数重载 即有相同的函数名,但是有不同的参数个数与参数类型)

 A(float c,float d)
 {
 }
A(int c,int d)
{
}
A(float c,float d,float e)
{
}

这里需要注意有参构造的时候注意传值类型

float 类型

A a(5.0f , 6.0f);

3.3 默认的构造函数

每个类默认有一个空参空实体的构造函数(如果写了构造函数,则默认构造函数就没有了,需要时需手动添加)

A ()
{
}

如果不想使用构造函数有两种方法

// 1 私有化
private :
	A(){}
// 2 删掉
A() = delete;

4. 成员初始化列表

例1:正常初始化

#include <iostream>
using namespace std;
class Student
{
private:
    const char *m_name;
    int m_age;
    float m_score;
public:
    // 无参构造 给变量赋定值
    Student()
    {
        m_name = "aaa";
        m_age = 1;
        m_score = 99.0;
    }
    // 有参构造  给变量动态赋值
    Student(const char *name, int age, float score)
    {
        m_name = name;
        m_age = age;
        m_score = score;
    }
    void print ()
    {
        cout << m_name << " ," << m_age  <<  " ," <<  m_score << endl;
    }
};
int main(int argc, char const *argv[])
{
    Student s1;
    s1.print();
    Student s2("ccc" , 2 , 99.3f);
    s2.print();
    return 0;
}

例2:成员初始化列表

#include <iostream>
#include <string>
using namespace std;
class Student
{
private:
    // string m_name;
    // char *m_name;
    const char *m_name;
    int m_age;
    float m_score;
public:   
    //  无参 成员初始化列表  
    Student() 
        : m_name("bbb") , m_age(2) , m_score(93.0f) 
    {
        // TODO
    }
    // 有参 成员初始化列表  
    /**
     *  const char *name    常量指针     const 修饰*name   *name不可改变
     *  char * const name   指针常量     const 修饰 name   name不可改变
     *  char const *name    常量指针 等同于 const char *name 
     * 
     *  这里不写const 会报警告  但可以编过  
     *  
    */
    Student(const char *name, int age, float score)
        : m_name(name) , m_age(age) , m_score(score)
    {
       // TODO
    }
    void print ()
    {
        cout << m_name << " ," << m_age  <<  " ," <<  m_score << endl;
    }
};
int main(int argc, char const *argv[])
{
    Student s1;
    s1.print();
    Student s2("ccc",2,99.3f);
    s2.print();
    return 0;
}

运行结果都一样:

aaa ,1 ,99
ccc ,2 ,99.3

使用构造函数初始化列表并没有效率上的优势,仅仅是书写方便,尤其是成员变量较多时,这种写法非常简单明了。

初始化列表可以用于全部成员变量,也可以只用于部分成员变量

Student(char *name, int age, float score): m_name(name){
    m_age = age;
    m_score = score;
}

NOTE:成员变量的初始化顺序与初始化列表中列出的变量的顺序无关,它只与成员变量在类中声明的顺序有关。

为啥推荐成员初始化列表的写法?

#include <iostream>
using namespace std;
class Example
{
public:
    Example()
    {
        cout<< "Create Example" << endl;
    }
    Example(int x)
    {
        cout<< "Create Example with "  << x << endl;
    }
};
class A
{
private:
    string m_name;
    // 创建了 Example 的无参构造 对象
    Example m_Example;
public:
    A()
    {
        m_name = "name";
        // 创建新的有参构造对象覆盖第一次赋值  
        m_Example = Example(1);
    }
};
int main(int argc, char const *argv[])
{
    A a;
    return 0;
}

结果:

C++构造函数怎么用

A的构造函数换成成员初始化列表的写法

//    A() : m_name ("name"),m_Example(Example(1))  		与下面写法相同
A() : m_name ("name"),m_Example(1)
    {
    }

结果:

C++构造函数怎么用

感谢各位的阅读!关于“C++构造函数怎么用”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/110319.html

(0)

相关推荐

  • 抖音刷点赞刷粉,抖音3元1000粉自助下单网址?

    技术抖音刷点赞刷粉,抖音3元1000粉自助下单网址?抖音刷赞的妙用,抖音刷赞有那些用处,随着抖音的火爆,现在入住抖音的用户那是相当多呀,入住抖音的用户多了,当然抖音内部的竞争也就大了,有部分抖音新人没有人气,没有名气,响

    测评 2021年10月19日
  • 金柝,一腔热血换来失望的诗句

    技术金柝,一腔热血换来失望的诗句1、朝来入庭树,孤客最先闻金柝。——刘禹锡《秋风引》2、过尽千帆皆不是,斜晖脉脉水悠悠,肠断白频洲。——温庭筠《梦江南》3、渐行渐远渐无书,自此山水不相逢。——欧阳修《木兰花》
    4、无人收

    生活 2021年10月27日
  • 【python】使用Django搭建一个简易的web服务器

    技术【python】使用Django搭建一个简易的web服务器 【python】使用Django搭建一个简易的web服务器前言
    【玛卡巴卡】需要搭建一个接受文件的服务器,现在尝试用Django一步一步实

    礼包 2021年11月26日
  • Java多线程中原子性操作类怎么用

    技术Java多线程中原子性操作类怎么用小编给大家分享一下Java多线程中原子性操作类怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:

    攻略 2021年10月31日
  • 西游记内容简介200字,西游记简介,100字左右)

    技术西游记内容简介200字,西游记简介,100字左右)书中讲述了唐僧师徒四人一路降妖伏魔西游记内容简介200字,历经整整九九八十一难取经的故事。作者细腻而深刻地塑造了四个极其经典的形象:慈悲、宽厚但软弱、迂腐的师父唐僧;

    生活 2021年10月20日
  • 一句,你读过最美的一句话是什么

    技术一句,你读过最美的一句话是什么之一,友人在信中说:“那时只知沉湎于对生命的思考,常被一种极大的感召召唤到深邃中,思索一些人性与社会方面的东西”一句。许是源于对生命和理想的探索与追求,友人才作如此的叙述。哭墙隐现于生命

    生活 2021年10月20日