zoukankan      html  css  js  c++  java
  • 类外定义

    -----------------siwuxie095

       

       

       

       

       

       

       

       

    类内定义与内联函数

       

       

    内联函数使用关键字:inline 来定义,如:

       

       

       

       

    内联函数与普通函数的区别:

       

       

       

    内联函数省去了步骤 和 步骤,即 调用的部分 和 返回的部分,

    省去两个步骤后效率更高、速度更快

     

    但内联函数必须是结构和逻辑比较简单的代码,对于复杂的代码,

    即使加上 inline 关键字,编译器也会拒绝将其按照内联的方式进行

    编译

       

       

       

    在定义一个类时,将成员函数的函数体写在类的内部,这种定义方式

    称之为 类内定义,如:

       

       

       

       

    类内定义与内联函数的关系:

       

    类内定义的成员函数,编译器会将其优先编译为 内联函数,

    它不会将 inline 写出来,但会以 inline 的方式进行优先编译

       

    对于复杂的成员函数来说,无法编译成内联函数才编译成普通的函数

       

       

       

       

       

       

    类外定义

       

       

    所谓 类外定义,是指成员函数的函数体写在类的外部

       

       

    具体来讲,类外定义又分为两种形式:

       

       

       

       

    (1)同文件类外定义:

       

    成员函数虽然定义在类的外面,但其定义与类的定义在同一个文件当中

       

    如:

       

       

       

       

    (2)分文件类外定义:

       

    如果说 同文件类外定义 算是游击队的话,那么 分文件类外定义 则称得上正规军了

       

    几乎所有的 C++ 项目,但凡是专业一点的程序员,都会将类的定义分文件来完成,

    这样做有诸多的好处

       

    分文件类外定义时注意头文件的包含(很关键),如果没有包含,则找不到相应的声明

       

    如:

       

       

       

       

       

       

    程序:

       

    同文件类外定义:

       

    //此为同文件类外定义

    #include <stdlib.h>

    #include <iostream>

    #include <string>

    using namespace std;

       

    /***********************************************************/

    /*定义一个Teacher类,要求采用通文件类外定义和分文件类外定义

    *的方式完成,具体要求如下:

    *数据成员:

    * 名字

    * 年龄

    * 性别

    *成员函数:

    * 数据成员的封装函数

    * 授课teach */

    /***********************************************************/

       

       

    class Teacher

    {

    public:

    void setName(string _name);

    string getName();

    void setGender(string _gender);

    string getGender();

    void setAge(int _age);

    int getAge();

    void teach();

    private:

    string m_strName;

    string m_strGender;

    int m_iAge;

    };

       

    void Teacher::setName(string _name)

    {

    m_strName = _name;

    }

       

    string Teacher::getName()

    {

    return m_strName;

    }

       

    void Teacher::setGender(string _gender)

    {

    m_strGender = _gender;

    }

       

    string Teacher::getGender()

    {

    return m_strGender;

    }

       

    void Teacher::setAge(int _age)

    {

    m_iAge = _age;

    }

       

    int Teacher::getAge()

    {

    return m_iAge;

    }

       

    void Teacher::teach()

    {

    cout << "现在上课...." << endl;

    }

       

    int main(void)

    {

    Teacher t;

    t.setName("孔子");

    t.setGender("");

    t.setAge(30);

    cout << t.getName() << " " << t.getGender() << " " << t.getAge() << endl;

    t.teach();

    system("pause");

    return 0;

    }

       

       

       

    分文件类外定义:

       

    Teacher.h:

       

    #include <string>

    using namespace std;

       

    class Teacher

    {

    public:

    void setName(string _name);

    string getName();

    void setGender(string _gender);

    string getGender();

    void setAge(int _age);

    int getAge();

    void teach();

    private:

    string m_strName;

    string m_strGender;

    int m_iAge;

    };

       

       

       

    Teacher.cpp:

       

    #include "Teacher.h"

    #include <iostream>

    using namespace std;

       

    void Teacher::setName(string _name)

    {

    m_strName = _name;

    }

       

    string Teacher::getName()

    {

    return m_strName;

    }

       

    void Teacher::setGender(string _gender)

    {

    m_strGender = _gender;

    }

       

    string Teacher::getGender()

    {

    return m_strGender;

    }

       

    void Teacher::setAge(int _age)

    {

    m_iAge = _age;

    }

       

    int Teacher::getAge()

    {

    return m_iAge;

    }

       

    void Teacher::teach()

    {

    cout << "现在上课...." << endl;

    }

       

       

       

    main.cpp:

       

    #include <stdlib.h>

    #include "Teacher.h"

    #include <iostream>

    using namespace std;

       

    /***********************************************************/

    /*定义一个Teacher类,要求采用通文件类外定义和分文件类外定义

    *的方式完成,具体要求如下:

    *数据成员:

    * 名字

    * 年龄

    * 性别

    *成员函数:

    * 数据成员的封装函数

    * 授课teach */

    /***********************************************************/

       

    int main(void)

    {

    Teacher t;

    t.setName("孔子");

    t.setGender("");

    t.setAge(30);

    cout << t.getName() << " " << t.getGender() << " " << t.getAge() << endl;

    t.teach();

    system("pause");

    return 0;

    }

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    ArcGIS Server TileLayer 跨域读取
    dojo.declare 未定义
    注册部署SOE, 提交SOE只能在IE浏览器中
    在maptalks中加载三维模型obj,fbx,glb
    三维模型 obj 转化为 three Json 文件格式
    leaflet map 地图初始化不能铺满div
    查找进行的过程中被停止 解决办法
    逆向的第一个小代码
    编码不规范导致的错误
    android4.4.2 短信广播变更
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6719486.html
Copyright © 2011-2022 走看看