• C++ 构造函数


    构造函数

    构造函数:是一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用,而是在创建对象时自动执行。

    #include<iostream>
    #include<string>
    using namespace std;
    
    class Student{
    private:
        string m_name;
        int m_age;
        float m_score;
    public:
    	//声明构造函数
    	Student(string name, int age, float score);
    	//声明普通成员函数 
        void show();
    };
    //定义构造函数 
    Student::Student(string name, int age, float score){
        m_name = name;
        m_age = age;
        m_score = score;
    }
    //定义普通成员函数 
    void Student::show(){
        cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
    }
    int main(){
        //创建对象时向构造函数传参 
        Student stu("小明", 15, 92.5);
        stu.show();
        
        Student *pstu = new Student("小花", 16, 98);
        pstu -> show();
        
        return 0;
    }
    
    /*运行结果*/
    小明的年龄是15,成绩是92.5
    小花的年龄是16,成绩是98
    

    构造函数必须是public属性的,否则创建对象时无法调用。并且构造函数没有返回值。

    构造函数的重载

    一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。

    构造函数的调用是强制性的,创建对象时只有一个构造函数会被调用。

    #include<iostream>
    #include<string>
    using namespace std;
    
    class Student{
    private:
        string m_name;
        int m_age;
        float m_score;
    public:
    	//声明构造函数
    	Student();
    	Student(string name, int age, float score);
    	//声明普通成员函数 
        void show();
    };
    //定义构造函数 
    Student::Student()
    {
    	m_name = "";
    	m_age = 0;
    	m_score = 0.0;
    }
    Student::Student(string name, int age, float score){
        m_name = name;
        m_age = age;
        m_score = score;
    }
    //定义普通成员函数 
    void Student::show(){
        cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
    }
    int main(){
        //创建对象时向构造函数传参 
        Student stu("小明", 15, 92.5);
        stu.show();
        
        Student *pstu = new Student();
        pstu -> show();
        
        return 0;
    }
    
    /*运行结果*/
    小明的年龄是15,成绩是92.5
    的年龄是0,成绩是0
    

    默认构造函数

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

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

    构造函数初始化列表

    构造函数初始化列表并没有效率上的优势,仅仅是书写方便。

    对象在栈上分配内存,成员变量的初始值是不确定的。

    #include<iostream>
    #include<string>
    using namespace std;
    
    class Student{
    private:
        string m_name;
        int m_age;
        float m_score;
    public:
    	//声明构造函数
    	Student(string name, int age, float score);
    	//声明普通成员函数 
        void show();
    };
    //采用初始化列表 
    Student::Student(string name, int age, float score):m_name(name), m_age(age), m_score(score){} 
    //定义普通成员函数 
    void Student::show(){
        cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
    }
    int main(){
        //创建对象时向构造函数传参 
        Student stu("小明", 15, 92.5);
        stu.show();
        
        return 0;
    }
    
    

    初始化const成员变量

    初始化const成员变量的唯一方法就是使用初始化列表。

  • 相关阅读:
    office文件在线预览,模仿网易邮箱在线预览的
    SQLServer加入域后无法远程连接
    c#将金额转换为大写,支持小数点,原创经典
    GridView多行标题行、改造标题行、自定义标题行完美版
    汇编语言常用指令
    Nature重磅:Hinton、LeCun、Bengio三巨头权威科普深度学习
    微软新技术证明深度学习还能更“深入”
    几个激光的驱动
    rplidar跑cartographer
    Git常用命令速查表
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12347028.html
Copyright © 2020-2023  润新知