1.面向过程和面向对象的初步认识
c语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
c++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
举个栗子:外卖系统
面向过程:下单、接单、送餐(关注的是这三个过程,实现这三个过程的函数)
面向对象:客户、商家、骑手(关注的是这三个对象之间的关系)
//c语言
//比如定义一个栈
struct Stack
{
STDataType* a;
int size;
int capacity;
};
//不难发现栈里面只存有数据,也就是说数据和方法是分离的,重点关注的是过程(函数的实现)
类——自定义的一个新的类型
类由两部分组成:1、成员变量(属性)
2、成员函数(方法)
访问限定符:public(公有)、protected(受保护的)、private(私有)。每个都代表着不同的访问权限
访问限定符说明:
1、public修饰的成员可以在类外直接访问
2、protected和private修饰的成员不能在类外直接访问
3、访问权限的作用域从该访问限定符出现的位置开始直到下一个访问限定符出现为止
4、class的默认访问权限为private,struct为public(因为struct要兼容c)
写一个简单的学生类
#include<iostream>
#include<string>
using namespace std;
class student
{
//一般方法放在public中,成员变量放在private中
public:
student(string name1,int num1);//构造函数
void display();//打印信息的函数
private:
string name;//姓名
int num;//学号
};
student::student(string name1, int num1)
{
name = name1;
num = num1;
}
void student::display()
{
cout << name << " " << num << endl;
}
int main()
{
student st1("zhangsan",2);//类的实例化对象
st1.display();
//zhangsan 2
return 0;
}
那怎样计算类的大小呢?
直接上结论:一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐,注意空类的大小,空类比
较特殊,编译器给了空类一个字节来唯一标识这个类。
例如以下代码:
#include<iostream>
using namespace std;
// 类中既有成员变量,又有成员函数
class A1 {
public:
void f1(){}
private:
int _a;
};
// 类中仅有成员函数
class A2 {
public:
void f2() {}
};
// 类中什么都没有---空类
class A3
{};
int main()
{
cout << sizeof(A1) << endl;//4
cout << sizeof(A2) << endl;//1
cout << sizeof(A3) << endl;//1
return 0;
}
问题:为什么没有成员变量的类或者空类的大小是1呢?
答案:大小是1,给1个字节不是为了存储数据,是占位,表示对象存在过,这样当类实例化之后才能通过地址区分这些对象。
类的对象的初始化
#include<iostream>
using namespace std;
class Date
{
public:
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1;
d1.Init(2021, 6, 14);
return 0;
}