C++三大特性:封装,继承,多态
对象:存在属性和行为
封装:
1.将属性和行为作为一个整体,表现生活中的事物
2.将属性和行为加权限控制 private
语法:
class 类名{ 访问权限:属性/行为}
//=== 封装意义一:将属性和行为写在一起表示事物
#include<iostream>
#define _USE_MATH_DEFINES
#include<math.h>
using namespace std;
class Circle{
//属性
public:
int R;
//方法
double account_S(){
return 2*M_PI*R;
}
};
int main(){
//创建对象
Circle c1;
//给对象赋值
c1.R= 10; //对象.属性
//对象.方法()
}
// 练习2 创建一个学生类===
#include<iostream>
#include<string>
using namespace std;
class Student{
//类中属性和行为 称为成员
//属性:成员变量
//行为:成员方法
public:
string m_Name;
int m_age;
void showStudent(){
cout<<"姓名:"<<m_Name<<endl;
cout<<"年龄:"<<m_age<<endl;
}
void setName(string name){//形参name
m_Name = name;
}
void setAge(int age){ //形参age
m_age = age;
}
};
int main(){
Student stu1;
stu1.m_Name = "小徐徐";
stu1.m_age = 2;
stu1.showStudent();
Student stu2;
stu2.setName("大徐徐"); //实参"大徐徐"
stu2.setAge(18);
stu2.showStudent();
}
//===封装意义二:访问权限
公共权限 public :成员类 内部可以访问 外部可以访问
保护权限 protected : 内部可以访问 类外不可访问
私有权限 private :内部可以访问 类外不可访问
protected private区别主要在继承方面:
protected :父亲的东西 继承人也可以访问
private:父亲的小秘密,继承人不可以访问的
#include<iostream>
#include<string>
using namespace std;
class Person{
public:
string f_Name;//大家都可以知道的:我爹的名字
protected:
string f_Car;//继承人可以继承的:我爹的车
private:
string f_Secret;//继承人不能知道的:我爹的小秘密
public:
void func(){
f_Name = "father";
cout<<f_Name<<endl;
f_Car = "bicycle";
cout<<f_Car<<endl;
f_Secret = "秘密";
cout<<f_Secret<<endl;
}
void getName(string name){
f_Name = name;
}
};
int main(){
Person fa1;
fa1.f_Name = "TOTO";
// fa1.Car = "moto"; 会报错 不能从类外修改(访问)
// fa1.Secret = "no one"; 会报错 不能从类外修改(访问)
fa1.func();
//father 思考一下 为什么不是TOTO呢?
//bicycle
//秘密
}
//====struct 和 class 区别
struct 和 class 区别:主要体现在默认权限上
struct 默认权限为公开
class 默认权限为私有#include<iostream> #include<string> using namespace std; class EX_Private{ string ex_name = "臭徐徐"; }; struct EX_Public{ string ex_name = "香徐徐"; }; int main(){ EX_Private a; EX_Public b; // cout<<a.ex_name; 会报错 cout<<b.ex_name; }
这里会报警告 为什么呢?
假设我强行想改变私有属性 应该怎么做呢?
回答: 结合公有方法,改变私有变量
结合公有方法 一个set 让私有属性 = 形参
一个get return 私有属性
总结:通过方法内部的形参改变私有属性 ,从而返回改变后的属性
//======成员属性设置为私有=======
成员属性私有化优点:
1.可以自己控制读写权限
2.对于写权限,我们可以检测数据的有效性
#include<iostream>
#include<string>
using namespace std;
class Person{
public:
void setName(string name){
m_Name = name;
}
string getName(){
return m_Name;
}
void setAge(int age){ //在set中经常加入条件判断输入的数据是否合法
if(age>1000 || age<0){
cout<<"不是人"<<endl;
return;
}
else{
m_Age = age;//属性 = 形参
}
}
int getAge(){
return m_Age;
}
private:
string m_Name;
string m_Lover;
int m_Age;
};
int main(){
Person oneper;
oneper.setName("GUGU");
cout<<"姓名:"<<oneper.getName()<<endl;
oneper.setAge(2000);
cout<<"年龄:"<<oneper.getAge()<<endl;
//同一个对象不能对一个属性赋值两次吗?
oneper.setAge(2);
cout<<"年龄:"<<oneper.getAge()<<endl;
//cout<<oneper.Lover()<<endl; 不能直接改变私有属性 会报错
}