-
2.3、实现封装性(类与对象)
1、封装
也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,
对不可信的进行信息隐藏。
2、类与对象
1> 对象:客观世界中任何一个事物都可以看成一个对象( object )。对象组成:
数据——描述对象的属性。
函数——行为(操作代码),根据外界给的信息进行相应操作的代码外界给的信息进行相应操作的代码。2> 类:具有相同的属性和行为的对象抽象为类(class )
- 类是对象的抽象。
- 对象是类的实例化。
3、关键字
- class (构造一个类,类似于C语言的strcut。算是复合数据类型构造的关键字)
- public <公有的,公有成员>(修饰成员变量和成员函数,继承时也会用到。下面的private与protected一样的作用)
- private <私有的,私有成员>
- protected <受保护的,保护成员>
- 破坏封装性关键字:friend(友元类与友元函数)
》 在C++中,class(类)与struct(结构体)的区别
- struct的缺省作用域为public
- class的缺省作用域为private
4、类中的权限
1> 一般的做法:将(数据成员)成员变量指定为private,将需要被外界调用的成员函数指定为public,它们是类的对外接口。
2> 成员函数可以访问本类中任何成员(包括私有的和公用的),可以引用在本作用域中有效的数据。
3> 在类体中不允许对所定义的数据成员进行初始化。
4> 类中的数据成员的类型可以使任意的:例如(int、double、char、等等),也可以是另一个类的类型。
5> 自身类的指针或引用,可以作该类的成员。
6> 当另一个类的对象做为该类的成员时,如果另一个类的定义在后,需要提前声明。
7> 一般在类体内先说明用户感兴趣的公有成员,再说明私有成员(先public后private)。
8> 习惯将类定义的说明部分或者整个定义部分(包含实现部分)放在一个头文件中。
9> 养成在类外定义成员函数的习惯。小规模的函数体(一般5个语句以下)使用频繁的函数声明为内置函数。
5、类的定义格式与对象的定义格式
//类的定义格式:class 类名{}; //例如 class Tdata { public: void display(); private: int m_year; int m_month; int m_day; }; void Tdata::display() { cout << m_year << m_month << m_day; } /*对象的定义格式: 1、一般对象:Tdata 对象名 例如:Tdata data1; 2、指针对象: 例如:Tdata *p = Tdata();
6、this指针
- this指针是隐含于每一个类的成员函数中的特殊指针,该指针是一指向正在被某个成员函数操作的对象的指针,也就是要操作该成员函数的对象。
- 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,则隐含使用this指针,而通常不去显示的使用this指针来引用数据成员。
- 同样也可以使用*this指针来标示调用该成员函数的对象,指向本对象开始的指针。
- 如果没有多继承,则this指针可以视为32位指针;因为多继承的存在,this指针所指的最顶层父对象可能不
唯一,所以有时可能需要附加偏移量。因此大小不一定为32位。
#include <iostream> using namespace std; class Person { public: Person &fun(); void display(); private: int m_id; int m_age; } Person &::fun() { return *this; } //这个函数只是想单纯的返回一个自身对象 void Person::display() { cout << this->m_id << this->m_age << endl; //这里写m_id、m_age与this->m_id、this->m_age是一样的。 } int main() { Person p; p.display(); return 0; }
2.3封装性与其实现
最新推荐文章于 2023-04-14 14:55:50 发布