day01
2023年3月5日
知识点1.类的封装特性
1、使用结构体和函数,会造成数据和函数独立,容易造成函数调用错误的数据
//结构体,人
typedef struct{
char name[32];
int age;
}Person;
//结构体,狗
typedef struct{
char name[32];
int age;
}Dog;
void PersonEat(Person *p)
{
cout << p->name << "正在吃饭"<< endl;
}
void DogEat(Dog *d)
{
cout << d->name << "正在吃狗粮"<< endl;
}
void test01()
{
Person person ={"张三", 20};
Dog dog = {"旺财", 3};
PersonEat(&person);
DogEat(&dog);
//数据和方法独立,容易造成方法调用错误数据
DogEat((Dog *)&person);
}
2、封装特性:①把变量(属性)和函数(方法,操作)合成一个整体,封装在类中;
②对变量和方法进行访问权限控制。
3、访问权限(public、prinvate、protected):
①在类的内部,没有访问权限之分,所有成员可以互相访问;
②在类的外部,访问权限才有意义,只有public修饰的成员才能被访问,在没有涉及继承和派生时,private和protected是同等级的,外部不允许访问;
访问属性 | 属性 | 对象内部 | 对象外部 |
public | 公有 | 可访问 | 可访问 |
protected | 保护 | 可访问 | 不可访问 |
private | 私有 | 可访问 | 不可访问 |
知识点2.类的初始
1、语法:
//抽象的概念,系统不会为其分配空间
class 类名{
private://私有,类的外部不可直接访问
protected://保护,类的外部不可直接访问
数据
public://公有,类的外部可直接访问
方法
//在类的内部没有权限之分,都可以相互访问
};
2、举例
class Person{
protected:
int age;
private:
int my_money;
public:
char name[32] = "lucy";
void func()
{
my_money = 100;
cout << "hello 你好!我有"<<my_money <<"万" <<endl;
}
};
void test02()
{
Person person;
cout << person.name << "说:";
person.func();
//person.age;//err,类的外部不允许访问
//person.my_money;//err,类的外部不允许访问
}
class默认访问权限为private;struct默认访问权限为public。
知识点3.Person类的设计
#include <cstring>
class Person{
private:
char my_name[32];
int my_age;
public:
//初始化函数
void initPerson(char *name, int age)
{
strcpy(my_name,name);
my_age = age;
}
//对my_name进行写操作
void setName(char *name)
{
strcpy(my_name,name);
}
//对my_name进行读操作
char* getName()
{
return my_name;
}
//对my_age进行写操作
void setAge(int age)
{
if(age > 0 && age <100)
my_age = age;
else
cout << "年龄无效!" <<endl;
}
//对my_age进行读操作
int getAge()
{
return my_age;
}
//遍历Person的信息
void showPerson()
{
cout << "姓名:" <<my_name <<" 年龄:" << my_age << endl;
}
};
void test03()
{
//定义一个对象lucy,对象只能借助公有方法操作私有数据
Person lucy;
//初始化
lucy.initPerson("lucy", 20);
//获取姓名
cout << "姓名:" <<lucy.getName()<< endl;
//获取年龄
cout << "年龄:"<< lucy.getAge() << endl;
//更改年龄
lucy.setAge(123);//大于100,无效
lucy.setAge(23);
//遍历lucy的信息
lucy.showPerson();
}