C++类和对象的基本概念

举报
莫浅子 发表于 2022/12/29 21:30:16 2022/12/29
【摘要】 ​目录1.c和c++中struct的区别2.类的封装3.类的访问权限1.c和c++中struct的区别c语言中结构体中不能存放函数,也就是数据(属性)和行为(方 法)是分离的c++中结构体中是可以存放函数的,也就是数据(属性)和行为 (方法)是封装在一起的#define _CRT_SECURE_NO_WARNINGS #include <iostream>using namespace st...

目录

1.c和c++中struct的区别

2.类的封装

3.类的访问权限



1.c和c++中struct的区别


c语言中结构体中不能存放函数,也就是数据(属性)和行为(方 法)是分离的


c++中结构体中是可以存放函数的,也就是数据(属性)和行为 (方法)是封装在一起的


#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
using namespace std;
//c语言不能放函数
struct _stu
{
	int a;
	int b[5];
};
//c++中可以放函数
struct _stu1
{
	int a;
	int b[5];
	void print_stu()
	{
		cout << a << endl;
	}
};
struct student
{
    //学生的属性和数据
    int age;
    int id;
	char name[256];
	//操作属性的叫做 方法或行为‐函数
	void print()
	{
		cout << age << id << name << endl;
	}


 };
void test01()
{
	student obj;
	obj.age = 10;
	obj.id = 20;
	strcpy(obj.name, "lucy");
	obj.print();
 }
int main()
{
	test01();
	return 0;
}


2.类的封装

c语言中表示事物时,将属性和行为分离,有可能行为调用出错

比如你先定义一个人的属性和行为

struct Person
{
	int age;
	char name[128];
};
void Person_eat(struct Person *p)
{
	printf("%s 在吃饭\n", p->name);
}

然后定义一个狗的属性

struct Dog
{
	int age;
	char name[128];
};
void Dog_eat(struct Dog* p)
{
	printf("%s 在吃狗粮\n", p->name);
}

而测试的时候可以这样 

 调用了人的属性,在调用狗的行为

void test01()
{
	struct Person p1;
	p1.age = 20;
	strcpy(p1.name, "bob");
	Dog_eat(&p1);
}


c++对事物的封装

因为c++中struct里面可以存放函数,也就是行为,就不会存在上述情况

c++将事物的属性和行为封装在一起

’类和结构体的一个区别在于,类对成员可以进行访问的权限控 制,结构体不可以

类 = 类型 (事物的行为和属性) 类实例化出来的变量叫对象

类中的函数 可以访问类里面的成员

结构体中所有成员默认都是公有的 类中的所有成员默认是私有的,也可以修改成员的访问权限

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

//struct 
//类中的所有成员 访问权限都是私有的 private
class Person
{
 public://共有的
     //类中的所有成员 访问权限都是私有的 private
	//属性
	int age;
	char name[128];
	//行为
	void Person_eat()
	{
		printf("%s 吃饭\n", name);
	}

};
struct Dog
{
	//属性
	int age;
	char name[128];
	//行为
	void Dog_eat()
	{
		printf("%s 吃饭\n", name);
	}

};
void test01()
{
	Person p1;
	p1.age = 10;
	strcpy(p1.name, "lucy");
	p1.Person_eat();
}
int main()
{
	test01();
}


3.类的访问权限

编辑


#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string.h>
using namespace std;
class person
{
public:
	int  mTall;  // 多高可以让外人知道
protected:
	int mMoney; // 多少钱,只能让儿孙孩子 子类可以访问
private:
	int mAge; //年龄不想让外人知道

	void show()
	{
		cout << mTall << " ";
		cout << mMoney << " ";
		cout << mAge << " ";
	}
};

void test01()
{
	person p;
	p.mTall = 180;
}
int main()
{
	test01();

	return 0;
}


尽量设置成员变量为私有权限

优点:

对变量的设置时的控制

可以给变量设置只读权限

可以给变量设置只写权限

可以给变量设置可读可写权限

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。