类和对象
面向对象
什么是面向对象?面向对象就跟C类似但是区别又很大,众所周知C是面向过程,而这个过程又是函数的实现的过程,而C++的对象则是里面的重点,而不是函数的实现,比如一个购物系统,购物系统有客户下单、商家接单发货、快递员取货和送货,如果用C的话则关注客户下单、商家接单发货和快递员送货取货的实现过程,但是在C++关注的则是客户、商家和快递员之间的关系这就是面向对象。
类的定义
类就像C语言的结构体,不过在C++这里升级了叫类,类的意思是一个新的类型,就像自定义类型一样跟C的结构体如出一辙,我们以往用C语言的时候都是用struct name 创建一个自定义类型,而换在C++的话则是class name 使用方法和C语言的结构体一样,class 也能像struct 一样创建结构体,因为C++是兼容C的,但是使用class 里面的成员变量方法不一样。
#include <iostream>
using namespace std;
struct test1
{
public:
int a;
}
class test2
{
int a;
}
int main()
{
test1 a;
a.a = 10;
test2 b;
b.a = 20;
return 0;
}
访问限定符
C++提供三种访问限定符来更好的管理我们的类,公有限定符的作用就是字母意思,被这限定符作用的成员都是公有的可以任意使用,而保护和私有差不多,都是用来防止别人使用里面的成员。 我们都知道class 和struct 差不多,但是它们有一个区别,那就是没给限定符的时候,没给限定符的时候class 默认是私有说明里面的内容不能被外面访问,而struct 默认是共有的里面的内容可以任意访问。
类域
每个类创建都是一个新的域,如果想访问类域需要指定如:Stack :: Push ,私有和保护针对的是类域外面的不能直接访问它们,只能通过公有给的成员函数来合法使用。
实例化
用类创建的对象叫做实例化对象,当这个类实例化时会占用实际的空间。
限定符的使用
#include <iostream>
using namespace std;
class Stack
{
public://公有
void Push(int size, int val)
{
}
private://私有
{
int val;
int size;
int mainm()
{
Stack a;
Stack::Push(2, 2);
return 0;
}
类的大小
我们知道C语言中结构体是占空间的,但是类占不占呢?如果占是如何计算的呢?我们知道C语言结构体会内存对齐。 经过测试,我发现以下三中情况,成员函数是不算空间大小的,而里面的基本类型会。 如下:
#include <iostream>
using namespace std;
class test1
{
};
class test2
{
public:
void Push()
{
}
private:
int val;
};
class test3
{
int val;
};
int main()
{
cout << "test1:" << sizeof(test1) << endl;
cout << "test2:" << sizeof(test2) << endl;
cout << "test3:" << sizeof(test3) << endl;
return 0;
}
我们可以看到,如果是空类他会用一个字节占位,而成员函数则不计算在内并且也有内存对齐。
this指针
this是一个关键字,他是类成员函数里面的一个隐藏参数,每个成员函数都有一个this 指针接下来我们创建一个日期类就能很好的明白this指针的作用了。
#include <iostream>
using namespace std;
class Date
{
public:
Date(int year = 1, int moth = 1, int day = 1)
{
this->year = year;
this->moth = moth;
this->day = day;
}
void Print()
{
cout << this->year << ' ' << this->moth << ' ' << this->day << endl;
}
private:
int year;
int moth;
int day;
};
int main()
{
Date A;
A.Print();
return 0;
}
我们可以看到this 指针是存在的,而且它的作用是区分里面的变量,比如我实例化两个对象,每个对象都赋不同的值,编译器是如何区分的呢?答案是靠this 指针,this 指针的类型是:类类* const。
this指针的特性
this 指针无法直接做为形参,且只能在类的函数成员内使用。this 指针是隐藏的,this 指针的传址是传实例化对象的地址。
创作不易,你们的点赞是支持我创作的最大动力!
|