类和对象-1
类的定义
这里同样以课本P101样例为示例来说明。
/*P101 样例 时钟类*/
class Clock{
public:
void setTime(int newH,int newM,int newS);
void showTime(void);
private:
int hour,minute,second;
};
知识点
1、最最基本的结构
class Clock{ ///class关键字 类名 {花括号上边界
};///花括号下边界
一个类的声明当中最基本的部分
class
为类的关键字,声明一个类,也表示下面要写一个类。
Clock
为类名,是这个类的名字。
{}上下花括号将类的各个类的成员放入这个类当中,将类与其他代码分隔。
2、类当中的成员
......
void setTime(int newH,int newM,int newS)//函数成员
void showTime(void);//函数成员
......
int hour,minute,second;//数据成员
类当中的成员分为两种:数据成员和函数成员
数据成员:成员是数据
函数成员:成员是函数
3、类当中成员的访问控制属性
public:
.....
private:
.....
成员的访问控制属性的类型有三种:public、private、protect
不同类型的数据成员和函数成员分别写在相应的
访问控制属性:
之下
public
中文名:公有类型
课本定义:公有类型成员定义了类的外部接口
实际上:说白了从哪里都可以访问一个类当中的公有类型的成员,无论是在主函数当中,还是在哪里,只要在访问之前声明了一个类,那么就可以肆无忌惮的访问在这个类里面的公有类型成员其中的函数或者数据。
外部接口说白了就是外面可以访问到这个类的内容,这个内容可以是数据,也可以是函数。
private
中文名:私有类型
课本定义:私有类型成员只能被本类的成员函数访问,来自外部的任何访问都是非法的。
实际上:课本给的定义已经非常清楚了,除了在这个类内的成员可以访问以外,其他访问都是非法的。
但是本类的数据成员也可以访问本类的私有成员数据,这一点课本想表达的意思应该是只能在本类的成员函数中被本类成员数据和函数访问,而不是只能被本类的成员函数访问。
protect
中文名:保护类型
课本定义:保护类型成员的性质和私有类型成员的性质相似,其差别在于继承过程中对产生的新类影响不同。
这个在继承的时候再说。
public vs private
public当中的成员可以被任何地方的函数或者数据访问。
private当中的成员只能被本类的函数和数据访问。
对象
课本p103
我们可以像声明一个基本数据类型一样声明一个对象
对于基本数据类型的声明:
int a;
数据类型 变量名
同样的,对于对象的声明
Clock myClock;
类名 对象名
如果我们要访问一个对象的成员,我们可以用我们在c中访问结构体当中同样的方法去访问
即运用访问运算符
myClock.showTime(); ///访问myClock当中的showTime函数。
当使用指针进行访问时可以用语法糖’->’,这一点是和c语言无异的
Clock a;
a.setTime(1,2,3);
Clock *p; //一个Clock类的指针p
p = &a; //这个指针指向a
p->showTime(); //使用->访问其中的成员
类的成员函数
/*p104 时钟成员函数实现*/
void Clock::setTime(int newH, int newM, int newS)
{
hour = newH;
minute = newM;
second = newS;
}
void Clock::showTime(void)
{
cout<<hour<<':'<<minute<<':'<<second<<endl;
}
知识点
1、最基本的结构
类的成员函数实现的结构与一般函数的实现大同小异,在一些细节上略有不同
返回值类型 类名::函数成员名(参数表)
{
函数体
}
从c过度到c++的时候最容易忘记就是写 类名:: 这一个部分,任何类的函数成员都必须写,不然编译器无法识别这是一个类的函数并且会报错。
2、在成员函数中调用数据
在成员函数中可以调用成员函数所属类的所有成员,包括公有成员,私有成员和保护成员.
且不需要加
.
3、内联成员函数(inline)
这个不太重要而且比较简单大家自行百度。
简而言之就是成员函数可以直接在类当中实现。
如:
class Clock
{
public:
void setTime(int newH,int newM,int newS)
{
hour = newH;
minute = newM;
second = newS;
}
void showTime(void)
{
cout<<hour<<':'<<minute<<':'<<second<<endl;
}
private:
int hour,minute,second;
};
这样子直接在类当中实现成员函数是合法的。
根据书上的说法这样子可以节约资源。
而内联函数所写成的内联成员函数可以实现在类外实现成员函数同时达到和上面相同的效果
即:
class Clock{
public:
void setTime(int newH,int newM,int newS);
void showTime(void);
private:
int hour,minute,second;
};
inline void Clock::setTime(int newH, int newM, int newS)
{
hour = newH;
minute = newM;
second = newS;
}
inline void Clock::showTime(void)
{
cout<<hour<<':'<<minute<<':'<<second<<endl;
}
效果和上面相同。
据说代码片如果太长其实这个写法也会失效。