C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
我们以去酒店吃饭为例:
面向过程:点菜、洗菜、切菜、炒菜、上菜、吃菜……
面向对象:服务员、厨师、顾客……
#include<iostream>
using namespace std;
//C++兼容C struct的用法
//C++同时对struct进行了升级,把struct升级成了类
//1、结构体名称可以做类型
//2、里面可以定义函数
struct Student
{
void Init(const char* name, const char* gender, int age)
{
strcpy(_name, name);
strcpy(_gender, gender);
_age = age;
}
void printf()
{
cout << _name << " " << _gender << " " << _age << endl;
}
//类是个整体,可以把成员变量放在类的任意地方,这里放在了最后面
//这里不是必须加_
//习惯加这个,用于标识成员变量
char _name[20];
char _gender[5];
int _age;
};
int main()
{
//结构体名称可以做类型,不需要一定写成struct Student s1
Student s1;
s1.Init("zhangsan", "nan", 18);
s1.printf();
return 0;
}
C++还是更喜欢用class定义类
class className
{
// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。
类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。
但是,以上的代码只将声明struct Student
改为class Student
会报错:
在里面加上访问限定符public:
,才能编译成功。
class Student
{
//加上public:
public:
void Init(const char* name, const char* gender, int age)
{
strcpy(_name, name);
strcpy(_gender, gender);
_age = age;
}
void printf()
{
cout << _name << " " << _gender << " " << _age << endl;
}
char _name[20];
char _gender[5];
int _age;
};
int main()
{
Student s1;
s1.Init("zhangsan", "nan", 18);
s1.printf();
return 0;
}
接下来我们讲讲访问限定符
【访问限定符说明】
⚠️注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
【面试题】
问题:C++中struct和class的区别是什么?
解答:C++需要兼容C语言,所以C++中struct可以当成结构体去使用。另外C++中struct还可以用来定义类,和class是定义类是一样的,区别是struct的成员默认访问方式是public,class是的成员默认访问方式是private。
目前在不断更新<C++语言>的知识总结,已经更新完了<C语言><数据结构初阶>,未来我会系统地更新<Linux系统编程><Linux网络编程><数据结构进阶><MySQL数据库>等内容。想要系统学习编程的小伙伴可以关注我!