C语言封装
都可以访问,且不需要权限认证
//
// Created by CWF on 2022/10/5.
//
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Person{
char name[64];
int age;
};
void PersonEat(const struct Person *p){
printf("%s在吃饭\n",p->name);
printf("人的年龄是%d\n",p->age);
}
void test01(){
struct Person p;
strcpy_s(,sizeof("张三"),"张三");
p.age = 10;
PersonEat(&p);
}
struct Dog{
char name[64];
int age;
};
void DogEat(const struct Dog * dog)
{
printf("%s在吃狗粮\n", dog->name);
}
void test02()
{
struct Dog d;
strcpy_s(, sizeof("旺财"), "旺财");
d.age = 100;
DogEat(&d);
struct Person p;
strcpy_s(, sizeof("老王"),"老王");
DogEat( &p);
}
int main(){
test01();
test02();
system("pause");
return EXIT_SUCCESS;
}
C++封装机制
对于类/结构体的封装
//C++封装 理念: 将属性和行为作为一个整体,来表现生活中的事物
//第二次理念: 将属性和行为 加以权限控制
#include <iostream>
using namespace std;
//C++封装 理念: 将属性和行为作为一个整体,来表现生活中的事物
//第二次理念: 将属性和行为 加以权限控制
struct Person {
public:
char name[64];
int age;
void PersonEart() {
printf("%s在吃人饭\n", name);
}
};
struct Dog {
//公共权限
public:
char name[64];
int age;
void DogEat() {
printf("%s在吃狗粮\n", name);
}
};
void test01(){
Person p{};
strcpy_s(, sizeof("老王"),"老王");
p.PersonEart();
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
struct和class 区别?
class 默认权限 私有权限 而 struct默认权限是 公共权限
访问权限
public 公共权限 成员 类内 类外 都可以访问
private 私有权限 成员 类内 可以访问 类外 不可以访问 儿子不可以访问父亲的private权限内容
protected 保护权限 成员 类内 可以访问 类外 不可以访问 儿子可以访问父亲的protected权限内容
#include <iostream>
using namespace std;
//C++封装 理念: 将属性和行为作为一个整体,来表现生活中的事物
//第二次理念: 将属性和行为 加以权限控制
struct Person {
public:
char name[64];
int age;
void PersonEart() {
printf("%s在吃人饭\n", name);
}
};
struct Dog {
//公共权限
public:
char name[64];
int age;
void DogEat() {
printf("%s在吃狗粮\n", name);
}
};
void test01(){
Person p{};
strcpy_s(, sizeof("老王"),"老王");
p.PersonEart();
}
class Person2{
public:
string m_Name;//公共权限
protected:
string m_Car;//保护权限
private:
int m_pwd;
public:
void func(){
m_Name="张三";
m_Car="拖拉机";
m_pwd=123456;
}
};
void test02(){
Person2 p;
p.m_Name = "李四";// 公共权限 类外可以访问
// p.m_Car = "劳斯莱斯"; //保护权限 类外访问不到
// p.m_pwd = 123; //私有权限 类外不可以访问
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
将成员设置为私有属性
#include <iostream>
using namespace std;
#include <string>
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;
return;
}
m_Age = age;
}
//设置情人
void setLover(string lover)
{
m_Lover = lover;
}
private:
string m_Name{}; //姓名 可读可写
int m_Age = 18; //年龄 可读 可写(0 ~ 150之间)
string m_Lover{}; //情人 只写
};
void test01()
{
Person p;
//可以将char * 隐式类型转换为 string
p.setName("张三");
cout << "姓名: " << p.getName() << endl;
//获取年龄
p.setAge(100);
cout << "年龄: " << p.getAge() << endl;
//设置情人
p.setLover("苍井");
//cout << "张三情人是:"<< p.m_Lover <<endl; //情人是只写权限 外部访问不到
}
//将成员属性都设置为私有好处:自己可以控制读写权限
//可以对设置内容 加有效性验证
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}