一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情。
1.1封装的意义概述
封装是C++面向对象三大特性之一 封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
1.2 封装的意义一:将属性和行为作为一个整体来表现对象。
语法: class 类名{ 访问权限: 属性 / 行为 };
演练1: 设计一本书,求出作者名字。
#include<iostream>
#include<string>
using namespace std;
class h_book
{
public: //访问权限 公共的权限
//属性
string book_name;//书名
//行为
//获取作者名字
string author()
{
if(book_name == "年华夜未央")
return "陈慕颜";
else if(book_name == "薄荷双生")
return "水阡墨";
else
return "小侯" ;
}
};
int main() {
//通过书名,创建书的对象
// b1就是一本书
h_book b1;
b1.book_name = "薄荷双生"; //给书名字进行赋值操作
cout << "作者的名字是: " << b1.author() << endl;
system("pause");
return 0;
}
输出:作者的名字是: 水阡墨 请按任意键继续. . .
演练2: 设计一本书,可以给书名和作者名字赋值,可以显示书名和作者名字
class h_book
{
public: //访问权限 公共的权限
//属性
string book_name;//书名
string book_author;
void b_n(string name)
{
book_name = name;
}
void b_a(string author)
{
book_author = author;
}
//行为
//获取作者名字
void show_book()
{
cout << "书名是:" << book_name <<" " << "作者名字是:" << book_author <<endl;
}
};
int main() {
//通过书名,创建书的对象
// b1就是一本书
h_book b1;
b1.b_n("年华夜未央");
b1.b_a("陈慕颜");
b1.show_book();
system("pause");
return 0;
}
输出:书名是:年华夜未央 作者名字是:陈慕颜 请按任意键继续. . .
1.3 封装意义二:类在设计时,可以把对象的属性和行为放在不同的权限下,加以控制
访问权限 有三种:
- 公共权限 public 类内可以访问 类外可以访问
- 保护权限 protected 类内可以访问 类外不可以访问
- 私有权限 private 类内可以访问 类外不可以访问
- 类内: 在类定义中
- 类外: 除了类定义内,都是类外,包括主函数
1.4 私有的读写权限
- 设计一个书名,设置读写权限
1. 可读可写
class h_book
{
private: //访问权限 公共的权限
string book_name;//书名
public:
string b_n(string name)
{
book_name = name;
return book_name;
}
};
h_book b1;
b1.b_n("年华夜未央");
cout << "书名是:" << b1.b_n("年华夜未央") <<" ";
输出:书名是:年华夜未央 请按任意键继续. . .
2. 只写
public:
void b_n(string name)
{
book_name = name;
}
h_book b1;
b1.b_n("年华夜未央");
cout << "书名是:" << b1.book_name <<" ";
//错误提示:[Error] 'std::string h_book::book_name' is private
3. 只读
private: //访问权限 公共的权限
string book_name;//书名
public:
string b_n()
{
book_name = "陈慕颜";
return book_name;
}
};
int main() {
//通过书名,创建书的对象
// b1就是一本书
h_book b1;
b1.book_name = "陈慕颜"; //写入
cout << "书名是:" << b1.b_n() <<" ";
system("pause");
return 0;
}
//错误提示:[Error] 'std::string h_book::book_name' is private
注意:
- 类和结构体 的不同: 在C++中 struct和class唯一的区别就在于 默认的访问权限不同
区别:
-
- struct 默认权限为公共
-
-
class 默认权限为私有
-