c++知识细节-类和对象-成员函数/对象拷贝/私有成员
综述
- 类是我们自己定义的数据类型(新类型)
设计一个类要考虑的角度:
(1) 站在设计和实现者的角度
(2) 站在使用者的角度
(3) 父子关系
类基础
(1) 一个类就是一个用户自己定义的数据类型,我们可以把类想象成一个命名空间,里包着一堆东西(成员函数,成员变量)
(2) 如果是类的对象,使用对象名.成员名
来访问成员;如果是指向这个对象的指针,使用指针名->成员名
来访问成员.
(4) public成员提供累的接口,暴露给外界,供外界使用;private成员提供了各种实现类功能的细节方法和属性,不暴露给外界,外界无法使用.
(5) struct可以理解成一个成员全都为public的类.
(6) class成员默认是private私有的.
成员函数
- 类定义可以重复定义,不会报错,而全局变量不行.
//Time.h
#ifndef __MYTIME__
#define __MYTIME__
class Time
{
public:
int Hour; //小时
int Minute; //分钟
int Second; //秒钟
//成员函数
void initMytime(int tHour, int tMin, int tSec);
}
#endif
Time.cpp
#include <Time.h>
//成员函数的实现
//其中这两个::叫做作用域运算符,表示这里实现的initTime函数属于Time类
void Time::initMytime(int tHour, int tMin, int tSec)
{
Hour = tHour;
Minute = tMin;
Second = tSec;
//成员函数中,可以直接使用成员变量名
//哪个对象调用的更成员函数,这些成员变量就属于哪个对象.即类成员函数知道哪个对象
}
//main.cpp
#include <Time.h>
/* 不使用成员函数
void initMytime(Time & tTime, int tHour, int tMin, int tSec)
{
tTime.Hour = tHour;
tTime.Minute = tMin;
tTime.Second = tSec;
}
*/
void main
{
Time myTime;
//initTime(myTime,11,14,5);
myTime.initTime(11,14,5);
}
对象的拷贝
Time myTime; //类对象
mytime.Hour = 12;
mytime.Minute = 15;
mytime.Second = 40;
//以下这些都是对象的拷贝
//默认情况下,这种类对象的拷贝,是每个成员变量的逐个拷贝
//如果在类Time中定义适当的"赋值运算符",就能控制对象的这种拷贝行为.
Time myTime2 = myTime;
Time myTime3(myTime);
Time myTime4{myTime};
Time myTime5 = {myTime};
私有成员(private)
//Time.h
class Time
{
private :
int Millsecond; //毫秒
//私有函数
void initMillTime(int mls);
public:
int Hour; //小时
int Minute; //分钟
int Second; //秒钟
//成员函数
void initMytime(int tHour, int tMin, int tSec);
}
//Time.cpp
#include <Time.h>
void Time::initMytime(int tHour, int tMin, int tSec)
{
Hour = tHour;
Minute = tMin;
Second = tSec;
//不暴露给外部使用者,但是成员函数内部可以调用私有成员函数
initMillTime(0);
}
void Time::initMillTime(int mls)
{
Millsecond = mls;
}