zoukankan      html  css  js  c++  java
  • 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成员变量的唯一方法就是使用初始化列表。

  • 相关阅读:
    Oracle 10g AND Oracle 11g手工建库案例--Oracle 11g
    第十七篇:实例分析(1)--初探WDDM驱动学习笔记(八)
    Git权威指南学习笔记(二)Git暂存区
    C++11多线程教学II
    c++ 11 多线程教学(1)
    C++11 多线程 基础
    C++11下的线程池以及灵活的functional + bind + lamda
    intel线程库tbb的使用
    TBB入门
    TTB 基本
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12347028.html
Copyright © 2011-2022 走看看