1. 封装
1.1 实例
#include <iostream>
using namespace std;
const double PI = 3.14;
class Student
{
public:
void setName(string name)
{
this->name = name;
}
string getName()
{
return name;
}
void print();
private:
string name;
};
void Student::print()
{
cout << "name: " << name << endl;
}
int main()
{
Student s1;
s1.setName("John");
Student *p = &s1;
p->setName("Mary");
Student &r = s1;
r.setName("Lucy");
cout << s1.getName() << endl;
return 0;
}
1.2 权限
- public 公共权限(类内可以访问)
- protected 保护权限(类内可以访问,类外不可以访问)
- private 私有权限(类内可以访问,类外不可以访问)
1.3 struct 和 class 的区别
- struct 默认权限为公共
- class 默认权限为私有
1.4 成员函数的存储方式:
- 实例化对象时需要分配内存空间,数据和函数都需要存储空间
- 同一个类的不同对象的数据是不一样的,因此要为每个对象的数据成员分配内存单元
- 同一个类的不同对象的函数是一样的,因此将同类的所有对象的函数放在一个公共的区域
1.5 对象成员的访问:
Student s1;
s1.setName("John");
Student *p = &s1;
p->setName("Mary");
Student &r = s1;
r.setName("Lucy");
2. 构造函数和析构函数
2.1 构造函数
- 创建对象时对对象的数据成员初始化
- 构造函数是类的一个特殊的成员函数,构造函数名与类名相同,且没有返回值
- 构造函数不需要用户调用,由系统在创建对象时自动调用
- 构造函数内容一般是初始化数据语句,但也可以是其他的语句
- 创建对象时肯定会执行一个构造函数
class Person
{
public:
Person(int age)
{
this->age = age;
}
private:
int age;
};
class Box
{
public:
Box(int height, int length, int width):
(height),(length),(width){}
private:
int height;
int length;
int width;
};
class Boxes
{
public:
Boxes(int height, int length, int width):
h(height), l(length), w(width) {}
private:
int h;
int l;
int w;
};
- 如果没有手动写构造函数,那么系统会自动生成一个无参的、函数体为空的默认构造函数。
2.2 析构函数
- 析构函数在对象生命周期结束时自动调用。
- 析构函数没有返回值和参数。
- 如果没有手动写析构函数,那么系统会自动生成一个默认析构函数。
~Person() {}
3. 访问对象成员