类内定义与内联函数

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

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(); cout<< t.getName()<< " " << t.getGender() << " " << t.getAge() << endl;
t.teach(); system("pause");
return ;
}

代码示例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(); cout<< t.getName()<< " " << t.getGender() << " " << t.getAge() << endl;
t.teach(); system("pause");
return ;
}

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;
}

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

C++ 类外定义的更多相关文章

  1. C++类的成员函数(在类外定义成员函数、inline成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

  2. 如何利用c++编写不能被继承、但可以在类外定义对象的类

    #include <iostream> #include<string> #include<map> #include<vector> #include ...

  3. c++学习笔记之基础---类内声明函数后在类外定义的一种方法

    在C++的“类”中经常遇到这样的函数, 返回值类型名 类名::函数成员名(参数表){ 函数体.} 双冒号的作用 ::域名解析符!返回值类型名 类名::函数成员名(参数表) { 函数体. } 这个是在类 ...

  4. MFC 如何在一个类中使用在其他类中定义的变量或函数

    [声明:本文的知识点来源于网络,参考网址:https://blog.csdn.net/bill_ming/article/details/7407848] [以下三种方法亲测有效,可以根据具体情况来选 ...

  5. 为什么static数据成员一定要在类外初始化?(转)

    1.避免重复定义和初始化 <<c++ primer>>说在类外定义和初始化是保证static成员变量只被定义一次的好方法. 但,为什么static const int就可以在类 ...

  6. C++ 类的定义与实现

    摘自这篇博客https://blog.csdn.net/xulingxin/article/details/81335030   一."类" 的介绍     在C++中, 用 &q ...

  7. c++利用初始化列表在类内部和类外部定义构造函数的区别

    case 1:在类外定义构造函数,所有data member都在初始化列表中进行初始化. class SupportClass { public: SupportClass() { cout < ...

  8. JavaScript 类的定义和引用 JavaScript高级培训 自定义对象

    在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等.     一,概述 在Java语言中 ...

  9. Ruby学习: 类的定义和实例变量

    ruby是完全面向对象的,所有的数据都是对象,没有独立在类外的方法,所有的方法都在类中定义的. 一.类的定义语法 类的定义以 class 关键字开头,后面跟类名,以 end标识符结尾. 类中的方法以 ...

随机推荐

  1. Python的hasattr() getattr() setattr() 函数使用方法详解--转载

    hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...

  2. vapply

    尽管 sapply 非常方便和智能,但有时智能可能隐藏着风险.假如我们有一个数字列表:x <- list(c(1, 2), c(2, 3), c(1, 3))如果我们想得到一个向量,其中每个元素 ...

  3. PrestaShop 1.7 用户用户结账的时候出现承运人错误

    出现承运人的错误:Unfortunately, there are no carriers available for your delivery address. 如何解决这个错误? 请参考下面的解 ...

  4. hdu4549矩阵快速幂+费马小定理

    转移矩阵很容易求就是|0  1|,第一项是|0| |1  1|             |1| 然后直接矩阵快速幂,要用到费马小定理 :假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(m ...

  5. 通过git-bash一句话获得当前目录的全部csproj文件绝对路径

    #!/usr/bin/env bash %.sh}.txt 保存为 csprojfilelist.sh,注意换行符使用LF,如果git-bash关联了sh文件,直接双击就可以得到csprojfilel ...

  6. Granting and Managing Item Level Permission using SharePoint2013 Designer Workflow

    https://gnanasivamgunasekaran.wordpress.com/2015/12/29/granting-and-managing-item-level-permission-u ...

  7. JavaScript学习总结(二十三)——JavaScript 内存泄漏教程

    参考教程:http://www.ruanyifeng.com/blog/2017/04/memory-leak.html 一.什么是内存泄漏? 程序的运行需要内存.只要程序提出要求,操作系统或者运行时 ...

  8. JS获取当前时间到30天之后的日期区间

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. elasticsearch搜索引擎学习1

    用elasticsearch-river-jdbc同步数据到elasticsearch 用elasticsearch-river-jdbc同步数据到elasticsearch 1 插件安装  插件的g ...

  10. 201621123005《Java程序设计》第九次实验总结

    201621123005<Java程序设计>第九周实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 ...