C++ 封装(1): 类和对象
C++远征之封装篇(上) **** 笔记 方便自己查阅和复习,温故而知新。
目录
1 类与对象简介
如下图所示,一个狗的信息和技能,可以称之为对象。
当有了一大群狗的时候,需要建立一个表格,便于管理
此时,将狗的信息抽象出来,这时,类的定义就出来了。
那么在C++中,类的定义和组成部分如下图所示,有关键字,类型,属性,数据成员和成员函数等。
对于上面的类,还有很多东西没有抽象出来。目的不同,我们抽象出来的信息不同,则类也会不同。
对于有些内容隐藏起来,我们称之为封装。比如下图的电路板,电路板内的零部件均可隐藏起来,只留下几个按钮即可。
那么C++提供了三种访问限定符: public, protected和private
2 类与对象初体验
对象:具体的事物;
类:从对象中抽象出来的,是抽象的概念,同一个事物可以抽象出不同的类。
实例化对象的两种方式:
(1)从栈中实例化
(2)从堆中实例化
通过堆和通过栈实例化出来的对象, 那么如何去访问它们呢? 需要访问对象的成员,下面是两种访问方式:栈访问和堆访问。
代码示例
#include<iostream>
using namespace std;
//定义Coordinate类
class Coordinate
{
public:
int x;
int y;
void printX()
{
cout << x << endl;
}
void printY()
{
cout << y << endl;
}
};
int main()
{
//用栈访问类
Coordinate coor;
coor.x = 10;//赋值
coor.y = 20;
coor.printX();//调用类中的成员函数
coor.printY();
cout << "--------" << endl;
//用堆访问类
Coordinate *p = new Coordinate();
if (NULL == p)
{
return 0;
}
p->x = 100;//赋值
p->y = 200;
p->printX();//调用类中的成员函数
p->printY();
cin.get();
return 0;
}
运行结果:
3 初始字符串类型
对于使用字符串数组特别麻烦,下面将进行介绍:
C++有一个字符串类型: string
下面是使用string的一个例子:
下面给出string初始化方式及常用操作:
代码示例
#include<iostream>
#include<string>
using namespace std;
int main()
{
string name;
cout << "请输入您的姓名:" << endl;
getline(cin, name);
if (name.empty())
{
cout << "您输入的为空 " << endl;
cin.get();
return 0;
}
if (name == "admin")
{
cout<<"您是管理员 "<<endl;
}
cout << "hello " << name << endl;
cout << "您的名字的长度为:" <<name.size()<< endl;
cout << "您的名字第一个字母为:" << name[0] << endl;
cin.get();
return 0;
}
运行结果:
4 属性封装的艺术
将有些东西封装起来是有好处的,如下图所示,年龄这个数不可能超过1000,所以在输入的时候,需要有一个逻辑判断。
代码示例
#include<iostream>
#include<string>
using namespace std;
/**
定义类: Student
数据成员: m_strName
数据成员的封装函数:setName(), getName()
*/
class Student
{
public:
void setName(string _name)
{
m_strName = _name;
}
string getName()
{
return m_strName;
}
private:
string m_strName;//定义Student类私有数据成员m_strName
};
int main()
{
Student *str = new Student();
str->setName("SB");
cout << str->getName() << endl;
delete str;
str = NULL;
cin.get();
return 0;
}
运行结果:
5 类外定义
类外定义分为:同文件类外定义 和 分文件类外定义。 下图分别是两种定义的例子:
分文件类外定义可以很方便地管理自己的函数定义和声明。
6 对象的生死离别
总结
由于****知识点较多,所以分开记录,便于查找和复习。详见:C++ 封装(2) ——构造函数和析构函数
参考资料
[1] C++远征之封装篇(上) (注:图片均来自视频中PPT)