C++笔记之类外定义

类外定义是指在类的外部编写成员函数的函数体。C++的类外定义分为同文件类外定义和分文件类外定义。下面以一个定义类的例子说明什么是同文件类外定义和分文件类外定义。
定义一个Teacher类,具体要求如下:
数据成员:名字、年龄、性别;
成员函数:数据成员的封装函数、授课teach。

同文件类外定义

同文件类外定义顾名思义就是将函数体和函数声明写在一个文件里,文件名随意,内容如下:
#include <iostream>
#include <string>
#include <stdlib.h>
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;
};
//声明类结束

//类外函数
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函数中调用类的函数
int main() {
    Teacher t;
    t.setName("孔子");
    t.setGender("男");
    t.setAge(30);
    cout << t.getName() << endl;
    cout << t.getGender() << endl;
    cout << t.getAge() << endl;
    t.teach();
    system("pause");
    return 0;
}

分文件类外定义

分文件类外定义是将函数声明写在后缀名为.h的头文件里,然后将函数体写到另一个文件里,并且要包含这个头文件。在开发中常用的是分文件类外定义的方式。具体做法如下:
新建头文件,文件名没有要求,但是最好和类名保持一致,这里命名为Teacher.h:
#include <iostream>
#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;
};
新建源文件,文件名也没有要求,这里命名为demo.cpp:
#include "Teacher.h" //包含声明类的头文件
#include <iostream>
#include <string>
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() {
    Teacher t;
    t.setName("孔子");
    t.setGender("男");
    t.setAge(30);
    cout << t.getName() << endl;
    cout << t.getGender() << endl;
    cout << t.getAge() << endl;
    t.teach();
    system("pause");
    return 0;
}
当类外定义的函数有默认值时,只在类中给定默认值就可以,在编写函数体代码时不必再写默认值。比如下面的这个Student类:
class Student{
public:
    void setName(string _name = "张三");//设置name的默认值为“张三”
    string getName();
private:
    string m_strName;//只有一个数据成员name
};
然后在实现函数体时,就不必加上默认值了:
void Student::setName(string _name) {
    m_strName = _name;
}
在main函数中调用该函数:
#include "Student.h"
#include <iostream>
#include <string>
using namespace std;
int main() {
    Student st;
    st.setName();//没有给它传递参数,name将获得默认值“张三”
    cout << t.getName() << endl;//打印出“张三”
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值