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

    类内定义与内联函数

    像下面这种函数名与函数体都写在类里面的函数形式被称作类内定义,编译器编译的时候会把它默认成内联函数。

    class Student
    {
    public:
        void setAge(int _age){age = _age;}
        int getAge(){return age;}
        void study(){}
    private:
        string name;
        int age;
    };

    类外定义

    成员函数的函数体写在类的外面,这样叫做类外定义。

    类外定义分类:  

          同文件类外定义:函数的定义与函数体写在同一个文件里。

          分文件类外定义:函数的定义与函数体写在不同的文件里。

    类外定义方法:

          函数类型  类名 :: 函数名    

          void Teacher::teach()

    代码示例1:同文件类外定义

    #include <iostream>
    #include <stdlib.h>
    #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("cjj"); 
        t.setGender("");
        t.setAge(22);
        
        cout<< t.getName()<< " " << t.getGender() << " " << t.getAge() << endl;
        t.teach();
    
        system("pause");
        return 0;
    }

    代码示例2:分文件类外定义

    把上面同文件类外定义的代码分别放到三个不同的文件里,在根据不同文件调用的函数、关键字,加上需要的头文件。

    demo.cpp:

    #include <iostream>
    #include <stdlib.h>
    #include <string>
    #include "Teacher.h"
    using namespace std;
    
    /*************************************************************************
    定义一个Teacher类,要求分别采用同文件爱你类外定义和分文件类外定义
    的方式完成,具体要求如下:
    
    数据成员:
        姓名
        年龄
        性别
    
    成员函数:
        数据成员的封装函数
        授课teach
    
    *************************************************************************/
    
    int main(void)
    {
        Teacher t; // 实例化对象
        t.setName("cjj"); 
        t.setGender("");
        t.setAge(22);
        
        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;
    }

    两种类外定义的输出结果相同:

  • 相关阅读:
    gettid 和pthread_self的区别
    UDP socket也可以使用connect系统调用
    TCP协议中的SO_LINGER选项
    pthread_key_t和pthread_key_create()详解
    1、Window10 Electron 开发环境搭建
    如何查看Windows下端口占用
    Servlet 中使用POI生成Excel
    JdbcTemplate 操作Oracle Blob
    RedHat 6.5 离线安装 apache2.4.23
    windows下端口被占用的解决方法
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9249463.html
Copyright © 2011-2022 走看看