在 .cpp 源码文件中 , 使用 #include "Student.h"
代码 , 包含头文件 ,
使用
#include "Student.h"
#include "Student.h"
代码 的作用 , 相当于将 Student.h 头文件中的所有内容 , 拷贝了 2 次 ,
其效果类等同于 :
class Student
{
};
class Student
{
};
编译时会报如下 " “Student”:“class”类型重定义 " 错误 :
1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>Student.cpp
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Student.h(15,1): error C2011: “Student”:“class”类型重定义
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Student.h(14): message : 参见“Student”的声明
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
在头文件中 , 加上了 #pragma once
代码 , 即使在代码中 , 导入了 2 次头文件 , 也可以正常编译 , 不会报错 ;
#include "Student.h"
#include "Student.h"
在 .h 头文件中 , 只是对 变量 / 类 / 函数 , 进行声明 , 不实现它们 ;
导入 .h 头文件 的 作用是可以访问这些 变量 / 类 / 函数 的 声明 ;
在 实际 开发中 , 有两种情况下是需要导入 .h 头文件 的 :
在 Student.h 头文件中 , 定义 class Student 类 , 只声明该类 , 以及类的 成员属性 和 成员函数 ;
不实现 成员函数 ;
成员函数 在 对应的 Student.cpp 中实现 ;
代码示例 :
// 确保 该头文件 只包含一次
#pragma once
/*
// C 语言中可使用如下宏定义确保 头文件 只被包含一次
#ifndef Student_H
#define Student_H
// 源码主要内容
#endif // !Student_H
*/
class Student
{
private:
int age;
char name[64];
public:
void setAge(int age);
int getAge();
};
在 Student.cpp 源码中 , 导入 Student.h 头文件 , 这是 创建 Student 类时自动生成的 ;
在类中声明成员函数 void setAge(int age);
, 如果没有实现该成员函数 , 鼠标移动上去后 , 会报如下错误 ;
使用 Alt + 回车 快捷键 , 会给出修改提示 :
选第一个选项 , 即可在 Student.cpp 中生成实现该函数的代码 ;
声明的 函数 ,
void setAge(int age);
int getAge();
对应的 Student.cpp 中的方法如下 :
void Student::setAge(int age)
{
m_age = age;
}
int Student::getAge()
{
return m_age;
}
在 void Student::setAge(int age) 方法中 , 可以直接访问 Student 中的成员 , 使用 域作用符 等同于 类内部的环境 ;
首先 , 导入 Student.h 头文件 , 其中声明了类 , 可以直接使用类 ;
// 导入自定义类
#include "Student.h"
然后 , 直接在 main 函数中使用 Student 类即可 ; 先声明类 , 为类成员赋值 , 然后打印类的成员 ;
Student s;
s.setAge(18);
cout<< s.getAge() << endl;
代码示例 :
// 导入标准 io 流头文件 其中定义了 std 命名空间
#include
// 导入 std 命名空间
using namespace std;
// 导入自定义类
#include "Student.h"
int main() {
Student s;
s.setAge(18);
cout<< s.getAge() << endl;
// 控制台暂停
system("pause");
return 0;
}
执行结果 :
// 确保 该头文件 只包含一次
#pragma once
/*
// C 语言中可使用如下宏定义确保 头文件 只被包含一次
#ifndef Student_H
#define Student_H
// 源码主要内容
#endif // !Student_H
*/
class Student
{
private:
int m_age;
char m_name[64];
public:
void setAge(int age);
int getAge();
};
#include "Student.h"
void Student::setAge(int age)
{
m_age = age;
}
int Student::getAge()
{
return m_age;
}