C++初阶学习第三弹——类与对象(上)——初始类与对象

简介: C++初阶学习第三弹——类与对象(上)——初始类与对象

前言:

在前面,我们已经初步学习了C++的一些基本语法,比如内敛函数、函数重载、缺省参数、引用等等,接下来我们就将正式步入C++的神圣殿堂,首先,先给你找个对象


一、类与对象是什么?

在之前,我们也经常讲,说C语言是面向过程的,而C++是面向对象的,那这到底又有什么区别呢,我们可以看这样一个例子:

就拿盖房子而言:

面向过程其实就是一步步将房子盖起来,从打地基到垒墙再到封顶的整个过程应该如何去实现

而面向对象则是将盖房子所需要的东西找出来即可,比如人、水泥、砖块等等

鉴于C++面向对象的特点,于是就创建出类这个概念来处理每个对象,我们可以通过类来描述每个对象的全部特点

二、类的各部分组成

1、类的定义

C++中的类与C语言中的结构体是十分相似的,都是将一些数据定义在一起,使得他们具有联系,

C++中的类是由struct和class引入的,他们的用法如下:(后面会做解释)

struct:

struct Std
{
  int a;
  char b;
  void Init()
  {
    a = 0;
    b = '0';
  }
};

class:

class A
{
public:
  void Init()
  {
    a = 0;
    size = 0;
  }
private:
  int a;
  int size;
};

通过上面这两个举例,我们可以看出,C++中对类的引用,相较于C语言结构体,最大的不同就是在于可以定义函数,并且有访问限定符的运用

下面我们就先来讲解一下这些细则

2、类的访问限定符及封装

通过上面的,我们可以观察到,在class的举例中有public和private,这两个东西其实就是C++类中的访问限定符,这样的访问限定符有三个:public、private、protected

其中公有和保护私有的区别就是能否被外界直接访问,例如这样一个程序

class A
{
public:
  void Init()
  {
    a = 0;
    size = 0;
  }
  void Add()
  {
 
  }
private:
  int a;
  int size;
};
int main()
{
  A a;
 
  return 0;
}

我们创建了一个名字为a的类对象,在类中我们在pubic中定义了两个函数,在private中定义了两个整形变量,现在我们通过类外定义的这个类对象a去访问类中元素,看会有什么有趣的事情发生

当我们访问时,我们可以发现我们只能访问到public中的两个函数,而对于private中的两个整形变量则访问不到,这其实是因为private中的变量是受保护的,只能在类中进行访问,外界要想直接访问是做不到的


这样的设计给了我们极大的操作空间,这样对于一个对象的属性,我们就可以通过操作,把我们想让别人知道的"public"出来,而不想让别人知道的就可以放在"private"或"protected"中


注意事项:

1、private和protected区别不大,大部分情况下可以换着用,不同之处等以后学到再讲

2、struct默认类中变量是public的

3、class默认类中变量是private的

3、类的作用域

类定义了一个新的作用域 ,类的所有成员都在类的作用域中 。 在类体外定义成员时,需要使用 ::

作用域操作符指明成员属于哪个类域。

class Person
{
public:
 void PrintPersonInfo();
private:
 char _name[20];
 char _gender[3];
 int  _age;
};
// 这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{
 cout << _name << " "<< _gender << " " << _age << endl;
}

4、类的大小的计算

类在计算大小的时候,是不计算函数大小的

例如:

class A
{
public:
  void Init()
  {
    a = 0;
    size = 0;
  }
  void Add()
  {
 
  }
private:
  int a;
  int size;
};
int main()
{
  cout << sizeof(A) << endl;
  return 0;
}

运行结果:

没有计算函数的大小

5、类成员函数的this指针

相信一些细心的朋友已经注意到,在上面我们写的这些代码中,我们在写类成员函数时似乎总是少了一个形参,比如:

class A
{
public:
  void Init()
  {
    a = 0;
    size = 0;
  }
 
private:
  int a;
  int size;
};
int main()
{
  A a;
  a.Init();
  return 0;
}

类中的Init函数按照一般函数来说应该是要有一个形参的,不然怎么知道给谁初始化,但是却并没有形参,这就是因为类成员函数参数中是有一个默认的this指针表示创建的类变量的地址

所以上面那段程序,实际上完整的应该是:

class A
{
public:
  void Init(A* this)
  {
    this->a = 0;
    this->size = 0;
  }
 
private:
  int a;
  int size;
};
int main()
{
  A a;
  a.Init();
  return 0;
}

只不过C++在创建时就已经经过处理,不需要再写

尤其需要注意的是:

三、总结

以上就是C++类与对象的一些基本知识,下一步我们就将讲解默认函数,函数重载等更有意义的知识,敬请期待吧!!!

感谢各位大佬观看,创作不易,还请各位大佬点一个小小的赞!!!

相关文章
|
5天前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
|
4天前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
|
4天前
|
编译器 C++
virtual类的使用方法问题之静态和非静态函数成员在C++对象模型中存放如何解决
virtual类的使用方法问题之静态和非静态函数成员在C++对象模型中存放如何解决
|
4天前
|
编译器 C++
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
|
5天前
|
编译器 C++
【C++】类和对象(中)
【C++】类和对象(中)
|
6天前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
12 0
|
6天前
|
存储 算法 搜索推荐
【C++】类的默认成员函数
【C++】类的默认成员函数
|
11天前
|
C++
C++ --> 类和对象(三)
C++ --> 类和对象(三)
26 9
|
5天前
|
存储 编译器 程序员
【C++】类和对象(上)
【C++】类和对象(上)
|
6天前
|
存储 编译器 C++
【C++】类和对象(下)
【C++】类和对象(下)