- C语言封装 属性和行为分开处理,类型检测不够
//C.c
#include<stdlib.h>
#include<stdio.h>
struct Person {
char m_name[64];
int m_age;
};
void PlayGames(struct Person *p) {
printf("%s在打游戏\n",p);
}
void test01() {
struct Person p1;
strcpy(p1.m_name, "波波");
PlayGames(&p1);
}
struct Mice {
char m_name[64];
int m_age;
};
void DaDong(struct Mice *m) {
printf("%s在打洞\n", m);
}
void test02() {
struct Mice m1;
strcpy(m1.m_name, "土拨鼠");
DaDong(&m1);
}
void test03() {
struct Person p2;
strcpy(p2.m_name, "渣渣猫");
DaDong(&p2);
}
int main() {
test01();
test02();
test03();
system("pause");
return 0;
}
渣渣猫属于Person类,不可以打洞。
- C++中的封装 严格类型转换检测,让属性和行为绑定到一起
//C++.c
//#define _CRT_SECURE_NO_WAENINGS
#include<iostream>
//#include<stdio.h>
using namespace std;
struct Person {
char m_name[64];
int m_age;
void PlayGames() {
cout<<m_name<<"在打游戏"<<endl;
}
};
void test01() {
Person p1;
strcpy_s(p1.m_name, "哥哥");
p1.PlayGames();
}
struct Mice {
char m_name[64];
int m_age;
void dadong() {
cout << m_name << "在打洞" << endl;
}
};
void test02() {
Mice m1;
strcpy_s(m1.m_name, "锯嘴葫芦");
m1.dadong();
}
int main() {
test01();
test02();
system("pause");
return 0;
}
- 属性和行为作为一个整体来表示生活中的事物
- 控制权限 public 公有权限 protected 保护权限 private 私有权限
struct和class是一个意思,唯一的不同 默认权限,struct是public,但是class默认权限是private
公共权限:在类内部和类外部都可以访问
私有权限:私有成员(属性、函数)在类内部可以访问,类外部不可以访问
class Animal{
void eat(){
m_age = 10;
}
int m_age;
public:
int m_height;
};
void test04() {
Animal an;
//an.eat(); //私有不可以访问到
//an.m_age;
an.m_height = 20; //公有权限在类外部可以访问到
}
保护权限: 类内部可以访问,当前类的子类可以访问,类外部不可以访问
class Animal{
private:
void eat(){
m_age = 10;
}
int m_age;
public:
int m_height;
protected:
int m_weight;
void setWeight() {
m_weight = 37;
}
};
public 类内 类外 都可以访问
protected 类内可以访问 类外 不可以访问 (子类可以访问)
private 类内可以访问 类外 不可以访问 (子类不可以访问)