上章讲解怎么声明、定义类的函数以及调用方法,这章讲解具体实现化,浅入了解其构造本质、规则。
一、三种关键字(public、protected、private)应用范围
1、public(公共成员属性),类的成员属性使用权限。
Father.h:
#pragma once
class Father
{
//公共的行为或者属性(变量)
public:
void work(); //实现功能,工作领域
int paly(); //实现功能,交际方式
int m_Money; //钱
int m_Experience; //阅历
//受保护的行为或者属性(变量)
protected:
//私有的行为胡总和属性(变量)
private:
};
小编设置了两个公共成员属性:钱和阅历。
Father.cpp:
#include "Father.h"
#include <iostream>
using namespace std;
//实现功能,工作领域
void Father::work()
{
m_Money = 3000;
cout << "父亲一个月挣" << m_Money << "元" << endl;
}
//实现功能,娱乐方式
int Father::play()
{
m_Experience = 1;
cout << "父亲每天交际增长" << m_Experience << "%的阅历" << endl;
return 0;
}
//输出成长值
void Father::Print()
{
work();
play();
}
work()、paly()、m_Money 、m_Experience都属于公共成员属性,在公共的成员函数内,则可以调用其类部的成员变量,赋值定义。
主入口函数(类的使用.cpp):
#include <iostream> //C++标准库,输入、输出
#include "Father.h" //自定义class 类头文件
using namespace std; //使用std命名空间[所有的std::]
int main()
{
Father father;
father.work();
father.play();
cout << "月薪 =" << father.m_Money << endl;
cout << "阅历 =" << father.m_Experience << endl;
system("pause"); //暂缓功能,能让界面停留的功能
return 0;
}```
主入口函数跟类是两个文件,对于类文件而言,它就如字面的意思属于类外。work()、paly()呢,属于Father类的成员属性,在主入口函数(类外)中,只要通过father这个对象就可以调用,这就是“类外调用”。同样的,钱和阅历变量一样可以类外输出。
输出如下:
这就说明规则之一:类中公共成员属性,在类中和类外都可以调用。
2、protected(受保护的成员属性),类的成员属性使用权限。
Father.h:
#pragma once
class Father
{
//公共的行为或者属性(变量)
public:
void Print(); //输出成长值
//受保护的行为或者属性(变量)
protected:
void work(); //实现功能,工作领域
int play(); //实现功能,娱乐方式
int m_Money; //钱
int m_Experience; //阅历
//私有的行为胡总和属性(变量)
private:
};
小编将work()、play()、m_Money和m_Experience设为受保护的成员属性,Print()不变。
Father.cpp:
#include "Father.h"
#include <iostream>
using namespace std;
//实现功能,工作领域
void Father::work()
{
m_Money = 3000;
cout << "父亲一个月挣" << m_Money << "元" << endl;
}
//实现功能,娱乐方式
int Father::play()
{
m_Experience = 1;
cout << "父亲每天交际增长" << m_Experience << "%的阅历" << endl;
return 0;
}
//输出成长值
void Father::Print()
{
work();
play();
}
在定义的cpp文件内,则可以看出,不管类中成员属性到底是属于什么权限,它的定义方式不变。而受保护的成员函数、变量也能在类中调用。测试如下:
但是在主入口函数内,调用受保护的成员函数时就有变化了,代码如下:
int main()
{
Father father;
father.work();
father.play();
father.Print();
system("pause"); //暂缓功能,能让界面停留的功能
return 0;
}
输出的结果如下图所示:
这就说明:在类中可以调用受保护的成员属性,但是在类外不可以调用。
3、private(私有的成员属性),类的成员属性使用权限。
Father.h:
#pragma once
class Father
{
//公共的行为或者属性(变量)
public:
void Print(); //输出成长值
//受保护的行为或者属性(变量)
protected:
//私有的行为胡总和属性(变量)
private:
void work(); //实现功能,工作领域
int play(); //实现功能,娱乐方式
int m_Money; //钱
int m_Experience; //阅历
};
Father.cpp:
#include "Father.h"
#include <iostream>
using namespace std;
//实现功能,工作领域
void Father::work()
{
m_Money = 3000;
cout << "父亲一个月挣" << m_Money << "元" << endl;
}
//实现功能,娱乐方式
int Father::play()
{
m_Experience = 1;
cout << "父亲每天交际增长" << m_Experience << "%的阅历" << endl;
return 0;
}
//输出成长值
void Father::Print()
{
work();
play();
}
主入口函数(类的使用.cpp):
int main()
{
Father father;
father.Print();
system("pause"); //暂缓功能,能让界面停留的功能
return 0;
}
运行结果如下:
因为Print()函数属于公共属性的,但在公共函数内调用私有成员函数及变量,可以运行成功,这说明:在类中,可以调用私有属性。反之,在类外就不可以调用,代码如下:
在主入口函数(类的使用.cpp)添加调用work()和play()两个私有函数:
int main()
{
Father father;
father.work();
father.play();
father.Print();
system("pause"); //暂缓功能,能让界面停留的功能
return 0;
}
运行结果如下图所示:
提示:便于您的理解,请一个一个字的读。
条条代码铸前程,行行字母显乾坤。你的路上不孤单,一路陪行。