目录
- 七、类与对象基本概念
- 7.1 抽象
- 7.2 类的定义与声明
- 7.3 访问控制
- 7.4 类的实现与使用
- 7.5 对象指针、this指针与对象引用
- 7.6 构造函数
- 7.7 析构函数
- 7.8 拷贝构造函数
- 7.9 类类型作为函数参数
- 7.10 对象数组
- 7.11 静态成员
- 7.12 常对象与常成员(const)
- 7.13 友元
- 7.14 类的组合
七、类与对象基本概念
7.1 抽象
抽象是相对,而非绝对的
·在研究问题时,侧重点不同,可能会产生不同的抽象结果;解决同一问题时要求不同,也会产生不同的抽象结果。
-如果开发一个人事管理软件,那么关心的是员工的姓名、性别、工龄、工资、工作部门等相关信息。
-如果开发学籍管理软件,那么关心的是学生的姓名、性别、年龄、籍贯、所在学院等相关信息。
7.2 类的定义与声明
7.3 访问控制
类成员的访问控制
-
什么是“类内”和“类外”
在类声明之内称为类内
在类声明之外称为类外 -
数据封装的目的就是信息隐蔽。为了达到信息隐蔽,在C++类中,并非所有的成员都是对外可见的(或者说,是类外可以访问的)。
-
通过设置成员的访问控制属性来实现对类成员的访问控制。这些控制属性有: public、protected、private
7.4 类的实现与使用
实现一个类,就是按照所设定的功能语义去实现类中的每一个成员函数。
class Clock{private:int hour,minute,second;public:void setTime(int h,int m,int s){hour = h;minute = m;second = s;}void ShowTime(){cout<<"Current Time:";cout<<hour<<":"<<minute<<":"<<second<<endl;}
};
在类内实现成员函数,编译器按内联函数处理。
或者在类外实现成员函数
class Clock{private:int hour,minute,second;public:void setTime(int h,int m,int s);void ShowTime();
};void Clock::setTime(int h,int m,int s){hour = h;minute = m;second = s;
}
void Clock::ShowTime(){cout<<"Current Time:";cout<<hour<<":"<<minute<<":"<<second<<endl;
}
在C++中,类成员函数可以在类定义内部实现,也可以在类定义外部实现。在类内实现成员函数通常是内联函数,而在类外实现需要在类的头文件中声明函数,并在一个源文件中定义这些函数。
#include <iostream>
using namespace std;class Clock{private:int hour,minute,second;public:void setTime(int h,int m,int s);void addHour(int h);void addMinute(int m);void addSecond(int s);void ShowTime();
};void Clock::setTime(int h,int m,int s){hour = h;minute = m;second = s;
}
void Clock::addHour(int h){hour += h;
}
void Clock::addMinute(int m){minute += m;
}
void Clock::addSecond(int s){second += s;
}
void Clock::ShowTime(){cout<<"Current Time:";cout<<hour<<":"<<minute<<":"<<second<<endl;
}int main()
{Clock clock_1,clock_2;clock_1.setTime(9,5,25);clock_2.setTime(15,16,45);clock_1.addHour(3);clock_2.addMinute(8);clock_1.ShowTime();clock_2.ShowTime();return 0;
}
注意:每个对象各自包含了类中定义的各个数据成员的存储空间,但它们共享类中定义的成员函数。
总结:定义和使用类类型的过程
·抽象∶对事物进行抽象
·声明类:根据抽象的结果定义类的特性
·实现类:实现类中成员函数的逻辑
·使用类∶在程序中定义类的实例,使用类的公有成员。
在使用的过程中,有需要注意的地方
都不行!!!
7.5 对象指针、this指针与对象引用
7.6 构造函数
函数名和类名相同,没有返回类型,可以有参数。
当创建类的一个新对象时,构造函数被自动调用,完成对象的初始化工作。
7.7 析构函数
7.8 拷贝构造函数
7.9 类类型作为函数参数
这里有大量的时间和空间上使用,效率较低!
只有一次空间的分配,没有参数传递,效率高!
对象指针需要传递对象地址!
7.10 对象数组
7.11 静态成员
当用关键字static说明一个类成员时,该成员称为静态成员。
静态成员分为︰
- 静态数据成员
- 静态成员函数
7.12 常对象与常成员(const)
- 如果某个对象不允许被修改,则该对象称为常对象。C++用关键字const来定义常对象。
- const也可以用来限定类的数据成员和成员函数,分别称为类的常数据成员和常成员函数。
- 常对象和常成员明确规定了程序中各种对象的变与不变的界线,从而进─步增强了C++程序的安全性和可控性。
7.13 友元
友元关系
封装的目的就是为了实现信息隐蔽。
一个对象的私有成员只能被自己的成员访问到。当类外的对象或函数要访问这个类的私有成员时,只能通过该类提供的公有成员间接地进行。
C++提供了友元机制来打破私有化的界限,即一个类的友元可以访问到该类的私有成员。
缺点:因为类外函数是不能直接访问类中的私有成员的,因此该函数必须调用GetX和GetY公有成员函数先获取“点”的坐标,然后再计算两点距离,这种方式是不太方便的。
对友元关系的总结
友元具有如下的性质∶
类的友元可以直接访问它的所有成员。
友元的声明必须放在类的内部,但放在哪个段没有区别。
友元关系不具备对称性,即X是Y的友元,但Y不一定是X的友元。
友元关系不具备传递性,即X是Y的友元,Y是Z的友元,但X不一定是Z的友元。
7.14 类的组合
一个类的对象作为另一个类的成员,这体现的是整体和部分的关系,即对象的包含关系,这个作为成员的对象被称为子对象。
若子对象对应的类的构造函数有参数,那么包含该子对象的类必须使用表达式的方式先初始化子对象。
后面章节陆续更新,点赞越多更新越快,欢迎各位的关注~
专栏合集:
【C/C++】C语言程序设计基础知识(数据类型与表达式、控制语句、数组与结构)
【C/C++】C语言程序设计基础知识(指针、函数)
【C/C++】C++程序设计基础(输入输出、数据类型、动态内存、函数重载、内联函数、常量、引用)
声明:仅供学习参考使用,不另做他用,侵删