上篇:C++57个入门知识点_15 类及类的访问权限(C++数据及数据操作方法放在一起组成结构体的思想即为封装;关键字:Class;面向对象语言的3个基本特点:封装、继承、多态;修改实参方法;类默认为私有)中介绍到类的3种访问权限,类和结构体最大的区别即为其访问权限,结构体的默认访问权限为公有的,类的默认访问权限是私有的。本节接上篇介绍C++中类的标准规范。
C++中类的规范总结:
1.类名及成员变量、成员函数的一般命名规则:
(1) 类名: 单词首字母大写前加大写C
CWashMachine
;
(2)成员变量: m_名称
,名称第一个单词或字母小写,后首字母为大写,n
表示数据 m_nWidth
,p
表示指针 m_pWidth
,s
表示string
m_sWidth
(成员变量一般为私有
);
(3)成员函数: 单词首字母为大写 SetHour()
;
请注意:Qt
中习惯首字母小写,后首字母大小即变为setHour()
(成员函数一般部分公有
);
(4)对象名: 名称第一个单词或字母小写,后首字母为大写 dataExch
;
2. 类内的成员变量一般设置为私有,成员函数设置为公有,成员函数暴露给外部使用成员变量。
3. 类的声明一般写在.h
文件,函数实现写在.cpp
文件,调用时只需包含.h
的声明即可。
1. 类名及成员变量、成员函数的一般命名规则
//class--类:命名一般是在前加C,默认为私有权限
class CWashMchine {
//成员变量一般私有
private:
//数据成员/成员变量(member)命名规范前加m_
int m_nWidth;
int m_nHeight;
int m_nLength;
int m_nType;//类型(滚筒,波轮)
int m_nBland;//品牌
//成员函数一般公有
public:
//成员函数
void wash(Cloth& cl) {
printf("洗衣服 颜色=%d 大小=%d\r\n", cl.nColor, cl.nSize);
}
}
2. 类内的成员变量一般设置为私有,成员函数设置为公有,成员函数暴露给外部使用成员变量
2.1 为什么不建议将成员变量设置为public
以手表为例,当你需要修改一个手表的时间,可以将手表的时分秒等成员变量设置为public
,从而就可以让用户在main函数
中进行使用,但是
这种方法类似于你将手表拆解开,然后用手指去拨动指针到某一个时间,很暴力,有可能就损坏 了手表
。
如果用户设置m_nHour=25
,程序中也是可以的,但是时钟是没有25
的。
#include <iostream>
class CClock {
//成员变量是类的内部属性,如果为public,可能将内部的变量修改,破坏封装
public:
int m_nHour;
int m_nMinute;
int m_n_Second;
};
int main(int argc, char* argv[])
{
CClock clock;
clock.m_nHour = 1;
return 0;
}
2.2 成员变量设置为private,成员函数设置为public的原因
我们在写一个类的时候,也是不希望用户可以直接修改类中的成员变量,一般而言我们会将类的成员变量私有。
成员变量是类的内部属性,如果为public,可能将内部的变量修改,破坏封装
。
只能通过一个public函数类暴露给外面的调用者使用类的成员变量,而在函数内部可以对数据的调用进行检查
。 这样的写法类似于手表提供了按钮让你去调整时间,而不是暴力的拆开手表设置时间。
class CClock {
//成员变量是类的内部属性,如果为public,可能将内部的变量修改,破坏封装
private:
int m_nHour;
int m_nMinute;
int m_n_Second;
public:
//成员函数来暴露给外面的调用者使用
//函数需要声明
void SetHour(int nHour)
{
if (nHour >= 24 || nHour < 0)
{
return;
}
m_nHour = nHour;
};
};
int main(int argc,char* argv[])
{
CClock clock;
clock.SetHour(25);
return 0;
}
3. 类的声明一般写在.h文件,函数实现写在.cpp文件
一般而言,我们不希望类里面越写越大,要将声明与实现分开,类的声明一般写在.h文件,函数实现写在.cpp文件
,这里以一个CClock类为例:
3.1 包含类的项目的整体结构
整体结构如图,clock.h中放类的声明,clock.cpp放函数实现:
3.2 VS中添加.h和.cpp文件的方法
3.3 Clock类的写法及调用
(1)clock.h内容:一般类的声明部分
#pragma once
//手表
//声明一般写在.h文件中
class CClock {
//成员变量是类的内部属性,如果为public,可能将内部的变量修改,破坏封装
private:
int m_nHour;
int m_nMinute;
int m_n_Second;
public:
//成员函数来暴露给外面的调用者使用
//函数需要声明
int GetHour();
void SetHour(int nHour);
};
(2) clock.cpp中内容:实现一般写在.cpp中,为了避免class内过大,将函数写在类的外边,但需要加上::
,代表在类的作用域。
#include "clock.h"
//为了避免class内过大,将函数写在类的外边,但需要加上::,代表在类的作用域
//实现一般写在.cpp中
//get set
int CClock::GetHour() {
return m_nHour;
}
void CClock::SetHour(int nHour) {
//函数内部
if (nHour >= 24 || nHour < 0)
{
return;
}
m_nHour = nHour;
}
(3)如何调用类的成员:因为.h中包含了所有的声明,在调用的文件中加"#include “clock.h” "即可
test.cpp(用户)中内容:
#include <iostream>
#include "clock.h"
//某一个函数不是孤立存在的,是依靠某一个对象存在的
int main(int argc,char* argv[])
{
CClock clock;
clock.SetHour(25);
return 0;
}
4.学习视频地址:C++57个入门知识点_16 类的标准写法