C++ 封装(1): 类和对象

C++远征之封装篇(上) **** 笔记 方便自己查阅和复习,温故而知新。

目录

1 类与对象简介

2 类与对象初体验

代码示例

3 初始字符串类型

代码示例

4 属性封装的艺术

代码示例

5 类外定义

6 对象的生死离别

总结 

参考资料



1 类与对象简介

如下图所示,一个狗的信息和技能,可以称之为对象

C++ 封装(1): 类和对象

当有了一大群狗的时候,需要建立一个表格,便于管理

C++ 封装(1): 类和对象

此时,将狗的信息抽象出来,这时,的定义就出来了。

那么在C++中,类的定义和组成部分如下图所示,有关键字,类型,属性,数据成员和成员函数等。

C++ 封装(1): 类和对象

对于上面的类,还有很多东西没有抽象出来。目的不同,我们抽象出来的信息不同,则类也会不同。

对于有些内容隐藏起来,我们称之为封装。比如下图的电路板,电路板内的零部件均可隐藏起来,只留下几个按钮即可。

C++ 封装(1): 类和对象

 

 

C++ 封装(1): 类和对象

 

那么C++提供了三种访问限定符: public, protectedprivate

C++ 封装(1): 类和对象

 

 

2 类与对象初体验

对象:具体的事物;

:从对象中抽象出来的,是抽象的概念,同一个事物可以抽象出不同的类。

 

实例化对象的两种方式:

(1)从中实例化

(2)从中实例化

C++ 封装(1): 类和对象

C++ 封装(1): 类和对象

通过堆和通过栈实例化出来的对象, 那么如何去访问它们呢? 需要访问对象的成员,下面是两种访问方式:栈访问和堆访问。

C++ 封装(1): 类和对象

 

代码示例

#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;
}

运行结果:

C++ 封装(1): 类和对象

 

3 初始字符串类型

对于使用字符串数组特别麻烦,下面将进行介绍:

C++ 封装(1): 类和对象

C++有一个字符串类型: string

下面是使用string的一个例子:

C++ 封装(1): 类和对象

 

下面给出string初始化方式及常用操作:

C++ 封装(1): 类和对象

C++ 封装(1): 类和对象

C++ 封装(1): 类和对象

 

代码示例

#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;
}

运行结果:

C++ 封装(1): 类和对象

 

 

4 属性封装的艺术

将有些东西封装起来是有好处的,如下图所示,年龄这个数不可能超过1000,所以在输入的时候,需要有一个逻辑判断。

C++ 封装(1): 类和对象

 

C++ 封装(1): 类和对象

 

代码示例

#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;
}

运行结果:

C++ 封装(1): 类和对象

 

 

5 类外定义

C++ 封装(1): 类和对象

 

C++ 封装(1): 类和对象

 

C++ 封装(1): 类和对象

 

类外定义分为:同文件类外定义分文件类外定义。 下图分别是两种定义的例子:

C++ 封装(1): 类和对象

 

C++ 封装(1): 类和对象

分文件类外定义可以很方便地管理自己的函数定义和声明。

 

6 对象的生死离别

总结 

由于****知识点较多,所以分开记录,便于查找和复习。详见:C++ 封装(2) ——构造函数和析构函数

 

参考资料

[1] C++远征之封装篇(上) (注:图片均来自视频中PPT)