你的c++学习路上明灯_哔哩哔哩_bilibili 上述是我在B站发布的相应视频
目录
这一章作为一个先驱章节,这一个学好了以后,才能有后面的基础,不然学后面的东西会感觉很吃力的哦。
c++认为万事万物都可以看作对象,而对象又有其属性和行为。
具有相同性质的对象,我们可以抽象称为类。
#1.封装的意义
##1,将属性和行为作为一个整体
如何封装?
class 类名{访问权限,属性,行为(一般用函数来表示)}
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
const double PI = 3.14;
//建立一个圆类
class Circle {
//访问权限:
public:
//属性
int r;
//行为:一般用函数来实现
double calZC() {
return 2 * PI * r;
}
};
int main() {
//通过圆类来创建一个变量
//实例化:通过一个类,创建一个对象的过程。
Circle c1;
//初始化圆类
c1.r = 10;
cout << "圆的周长为:" << c1.calZC() << endl;
return 0;
}
##2,将属性和行为加以权限访问
类在设计时,可以把属性和行为放在不同的权限下加以控制
| public | 公共权限 | 类内类外都能访问 |
|---|---|---|
| private | 私有权限 | 类内可以,类外不行 |
| protected | 保护权限 | 类内可以,类外不行 |
这个时候,有人可能会想到struct,
其实struct也算一个类,它的访问权限默认为public而已
而,class的默认访问权限为私有权限
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class c1 {
int a;
}c;
struct c2 {
int a;
}c4;
int main() {
//c.a = 10; class类默认权限为私有权限
c4.a = 20;//struct结构体默认权限为公共权限,其实结构体也是属于一种类
cout << "a = " << c4.a<< endl;
return 0;
}
##3,实例化:通过一个类,创建一个对象的过程。
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
//设计一个学生类,属性有姓名和学号,可以展示学生的姓名和学号
class student {
public:
string name;
int num;
void print() {
cout << name << endl;
cout << num << endl;
//cout<<name<<endl<<num<<endl;
}
};
int main() {
student s;
cin >> s.name;
cin >> s.num;
s.print();
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
//设计一个学生类,属性有姓名和学号,可以展示学生的姓名和学号
class student {
public:
string name;
int num;
//通过行为来给属性赋值;
void setname(string Name) {
name = Name;
}
void setnum(int Num) {
num = Num;
}
void print() {
cout << name << endl;
cout << num << endl;
//cout<<name<<endl<<num<<endl;
}
};
int main() {
student s;
s.setname("zhangsan");
s.setnum(20);
s.print();
return 0;
}
#2.成员属性私有化
我们在创建类的时候,尽量将成员属性私有化,因为
1,可以自己控制读写权限
2,对只写权限,我们可以检测数据的有效性(不能让用户修改程序,即用户不能访问内部程序,以防用户进行非法操作)
#define _CRT_SECURE_NO_WARNINGS 1
#include<string>
#include<iostream>
using namespace std;
class person {
public:
string name;
protected:
string car;
private:
int password;
private:
//在类内都能访问
void func() {
name = "zhangsan";
car = "奔驰";
password = 1234;
}
};
int main() {
person p;
p.name = "lisi";
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<string>
#include<iostream>
using namespace std;
//成员属性私有化
class person {
//由于属性私有化了,那么就需要一个接口,用来链接类内和类外
public:
//姓名设置可读可写
void setname(string name) {
m_name = name;
}
string getname() {
return m_name;
}
//获取年龄
int getage() {
return m_age;
}
//设置年龄
//如果将属性私有化,对于写权限,我们可以检测数据的有效性
//这个步骤不能由用户来完成,只能由程序员在内部完成,只有私有
//权限 ,才能对写的操作进行限制,不然的话,容易产生无效信息
void setage(int age) {
if (age < 0 || age>150) {
cout << "你是人是鬼?" << endl;
m_age = 0;
return;
}
m_age = age;
}
//情人设置为只写
void setlover(string lover) {
m_lover = lover;
}
//属性全部设为私有权限,可以由程序员自己控制读写权限
private:
string m_name;
int m_age;
string m_lover;
};
int main() {
person p;
p.setname("zhangsan");
cout <<"姓名:" << p.getname() << endl;
p.setage(30);
cout <<"年龄:" << p.getage() << endl;
p.setlover("lisi");
return 0;
}
#3.例题:立方体类的设计
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//立方体类的设计
//创建立方体类
// 设计属性
// 设计行为。获取立方体面积和体积
//分别利用全局函数和成员函数判断两个立方体是否相等
class Cube {
private:
int m_L;
int m_H;
int m_W;
public:
//长
void setL(int l) {
m_L = l;
}
int getL() {
return m_L;
}
//高
void setH(int h) {
m_H = h;
}
int getH() {
return m_H;
}
//宽
void setW(int w) {
m_W = w;
}
int getW() {
return m_W;
}
//面积
int s() {
return 2 * (m_L * m_W + m_L * m_H + m_H * m_W);
}
//体积
int v() {
return m_L *m_W* m_H;
}
//这两个函数可以不传参,因为在类内,可以访问到私有权限内的成员,直接调用就行了
};
int main() {
//操作
return 0;
}
这只是一个引子,所以并不难,也就一点东西,但是一定是要打一遍的哈,看完这个以后,再去看看下一章,下一章才是重点所在。