C++面向对象三大特征:多态、继承、封装
对象与类:
对象:C++中认为万事万物都可以看作一个对象,而对象具有两个特征:属性和行为。
属性:属性指的是对象具有的性质,例如将书看为一个对象,那么书具有的属性就是内容、目录、出版社、书名
行为:行为就是对象的可以进行的操作、动作,如书可以被翻、书可以被撕、书可以被看。
类:具有相同性质的一类对象就称为类
封装
封装是将对象的属性和行为当作一个整体,用这个整体来表现对象的性质。一般来说,封装的对象属性和行为缺一不可。通过封装,我们可以得到具有相同性质的一组对象,即一个类;
封装一个类需要三个模块:访问权限、属性、行为
属性又称为:成员变量、成员属性
行为又称为:成员函数、成员方法
属性、行为:
下面用代码封装一个类:
//封装一个类
class Square
{
//访问权限
public:
//属性
int side;
//行为
int Cal()
{
return side * side;
}
};
int main()
{
Square S;
cin >> S.side;
cout << S.Cal() << endl;
return 0;
}
当然,我们也可以选择利用行为来改变类中的属性:
class S
{
public:
int num;
//接收num
void Get()
{
cin >> num;
}
//当num不等于第二次输入的n,将属性num改为n
void Check()
{
int n;
cin >> n;
if (n != num)
num = n;
}
//输出num
void Show()
{
cout << num<<endl;
}
};
int main()
{
S a;
a.Get();
a.Show();
a.Check();
a.Show();
return 0;
}
不同:
相同:
访问权限:
类的访问权限有三种:
public–公共权限,类内和类外皆可访问
protected–保护权限,类内可以访问,类外不可以访问
private–私有权限,类内可以访问,类外不可以访问
其中protected与private的不同与它的继承特性有关,后续学习到再补;
class Info
{
//类内
public:
string name="吴";
protected:
int id=123;
private:
int password=123456;
public:
void Show_name()
{
cout << name << endl;
}
protected:
void Show_id()
{
cout << id << endl;
}
private:
void Show_passowrd()
{
cout << password << endl;
}
};
int main()
{
//类外
Info Me;
Me.name = "梁";
Me.Show_name();
//Me.Show_id();//无法访问
//Me.Show_password();//无法访问
return 0;
}
class与struct权限区别:
提到访问的权限,当class中不声明访问权限时,默认成员变量为私有权限,即private。而与类class相似的类struct默认成员变量为公共权限,即public:
struct A
{
int id;
};
class B
{
int id;
};
int main()
{
B n;
A m;
//n.id = 10;//不可访问
m.id = 10;
return 0;
}
创建接口和成员私有化:
对于特定的成员,我们可以将其属性设为私有化,这样可以带来很多好处:
1.我们可以人为控制成员的读写功能;
2.我们可以对写功能进行检测限制;
下面代码运用了读写功能的控制以及接口设置的相关知识:
class Notebook
{
//私有属性
private:
int id=3121002;
int password=1235;
int grade=100;
char game_level='A';
//行为-读写接口
public:
void Read_id()//只读
{
cout << id << endl;
}
void Write_password(int newp)//只写
{
if (newp != 0000)//接口控制
{
password = newp;
}
else
{
cout << "Fail" << endl;
}
}
void Read_password()//只读
{
cout << password << endl;
}
};
int main()
{
Notebook Book;
Book.Read_id();//读
Book.Read_password();//读
Book.Write_password(1123);//写
Book.Read_password();//读
return 0;
}