封装:
将数据成员和成员函数包装进类中,加上具体实现的隐藏共同被称作封装,其结果是一个同时带有特征和行为的数据类型。(1 类是一个数据类型,2 这个数据类型带有特征和行为)
** 定义类,定义其数据成员、成员函数的过程称为封装类。
类:
类和结构体类似,结构体调用用 . 指针调用用 -> 。结构体安全性不好,任何人都能访问,而类的私有成员只能自己访问。类不仅可以保护数据,还可以提供成员函数操作数据。
这里写代码片
class 类名称
{
public:
...
//共有函数;(成员函数不占用类的内存)
...
protected:
...
//保护成员(在继承的时候会牵扯到)
...
private:
//私有数据成员int a;类的私有成员只能在类中访问自己的私有变量,或类的成员函数访问这个类的私有变量
//私有函数
...
};
成员函数有两种定义方法:1 在类的内部定义成员函数,2 在类的外部定义成员函数(要加上类作用域运算符::),在类的内部声明(一般是这样,包含头文件就能调用)。
类成员函数的重载:
1 类成员函数可以像普通函数一样重载
2 但是,不同类即使有相同的函数名也不算重载
类成员函数的默认参数:
类成员函数可以像普通函数一样设置默认参数。
成员函数的调用:
1 指定对象和成员函数名来调用
**注意:
**1 调用成员函数必须指定对象和成员函数名
**2 成员函数必须用对象来调用,在成员函数内部可以直接调用数据成员和成员函数。
**3 在成员函数内部,访问数据成员直接访问即可,不用通过对象来调用。
2 用指针来调用成员函数
这里写代码片
#include <iostream>
#include "car.h"
void foo(Car *pcar)
{
pcar -> print();
pcar -> stop();
}
int main()
{
Car a;//Car 是一个类
cout<<sizeof(a)<<endl;
foo(&a);
return 0;
}
3 用引用传递来访问成员函数
用对象的引用来调用成员函数,看上去和使用对象自身的情况一样
这里写代码片
void bar(Car& rcar)
{
rcar.print();
rcar.stop();
}
int main()
{
Car a;
bar(a);
return 0;
}