C语言和C++封装区别

  • 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;
}
  1. 属性和行为作为一个整体来表示生活中的事物
    在这里插入图片描述
  2. 控制权限 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 类内可以访问 类外 不可以访问 (子类不可以访问)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值