类和对象的定义
- 对象是现实中的对象在程序中的模拟。
- 类是同一类对象的抽象,对象是类的某一特定实体。
- 定义类的对象,才可以通过对象使用类中定义的功能。
设计类就是设计类型
- 此类型的“合法值”是什么?
- 此类型应该有什么样的函数和操作符?
- 新类型的对象该如何被创建和销毁?
- 如何进行对象的初始化和赋值?
- 对象作为函数的参数如何以值传递?
- 谁将使用此类型的对象成员?
类定义的语法形式
class 类名称
{
public:
公有成员(外部接口)
private:
私有成员
protected:
保护型成员
};
类内初始值
(注意:类内初始化是c++11的新特性,vs2012不支持该设定,请注意编译器版本)
- 可以为数据成员提供一个类内初始值
- 在创建对象时,类内初始值用于初始化数据成员
- 没有初始值的成员将被默认初始化。
- 类内初始值举例
class Clock {
public:
void setTime(int newH, int newM, int newS);
void showTime();
private:
int hour = 0, minute = 0, second = 0;
};
类成员的访问控制
1.公有类型成员
在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。
2.私有类型成员
在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。
如果紧跟在类名称的后面声明私有成员,则关键字private可以省略。
3.保护类型成员
与private类似,其差别表现在继承与派生时对派生类的影响不同,详见第七章。
对象定义的语法
- 类名 对象名;
- 例:Clock myClock;
类成员的访问权限
1.类中成员互相访问
直接使用成员名访问
2.类外访问
使用“对象名.成员名”方式访问 public 属性的成员
类的成员函数
- 在类中说明函数原型;
- 可以在类外给出函数体实现,并在函数名前使用类名加以限定;
- 也可以直接在类中给出函数体,形成内联成员函数;
- 允许声明重载函数和带默认参数值的函数。
内联成员函数
- 为了提高运行时的效率,对于较简单的函数可以声明为内联形式。
- 内联函数体中不要有复杂结构(如循环语句和switch语句)。
- 在类中声明内联成员函数的方式:
- 将函数体放在类的声明中。
使用inline关键字。
类和对象的程序举例:
#include <iostream>
using namespace std;
//类的定义
class Clock{
public:
void setTime(int newH = 0, int newM = 0, int newS = 0);
void showTime();
private:
int hour, minute, second;
};
//成员函数的实现:定义类中函数的功能
void Clock::setTime(int newH, int newM, int newS){//写上类名和作用域限定符
hour = newH;
minute = newM;
second = newS;
}
void Clock::showTime(){
cout << hour << ":" << minute << ":" << second;
}
int main()
{
Clock myClock;//创建一个对象
myClock.setTime(8,30,30);//调用对象中的函数
myClock.showTime();
return 0;
}
运行结果:
思考题:
如果先后调用:
myClock.setTime(8,30,30);
myClock.setTime(10);
myClock.showTime();
程序的输出是什么(__:__:__)