带你初步了解 类和对象 的基本机制(上)

简介: 带你初步了解 类和对象 的基本机制

类的初步了解:

我们在c语言中,结构体里面只能定义变量,在c++中结构体里面现在可以定义函数

struct stu
{
    void test1()
    {  
        ;      
    }
    int test2()
    {
        ;
    }
    int a;
    int b;
    int* c;
};

所以在c++中,c++兼容c的用法同时c++也对struct进行了升级,让其变成了类,另外可以直接用结构体的名称来定义变量(也就是可以用上面代码中的 stu 来定义变量) 我们类里面的函数叫做 成员函数 变量叫做 成员变量


 给大家穿插一个知识点,我们的成员变量在类里面只是一个声明,就像上面的a,b,c 只是声明,我们是在创建对象的时候才会有它的定义,后面的构造函数大家学后,就明白了。那你可能会说“int a =10;”这样写是不是定义呢?

当然也不是定义,这里的10是一个缺省值,用于初始化列表中使用,大家学到后面就知道了


成员变量的名字不要和成员函数中形参的名字相同,因为在使用的时候我们会采用就近原则它里形参的定义近就用形参:

struct stu
{
    void test1(int a)
    {  
        a = a;      
    }
    int test2()
    {
        ;
    }
    int a;
    int b;
    int* c;
};


这里的test1就是这种情况,所以是不能这样写的,对此,我们对成员变量的命名就可以自己加一些符号,既方便自己写的时候不容易搞混,也不会出现上面那种情况,我个人习惯是在变量的前面加上 _ 这个下划线,每个公司也都是有自己的标准来定义成员变量的


虽说我们的c++是兼容c语言的 我们可以用struct定义 但我们在c++就更喜欢使用 class 来定义我们写出来的类,可以用来定义变量,但现在这些变量我们都叫做 对象 (用类来定义了一个对象)


既然我们可以用class和struct 来定义类,那他们两个有什么区别呢? 


访问限定符:

这里与这个相关的就是 封装我们自己写的东西有的我不想让你随便访问我们就会用一个访问限定符把他封装起来(private)这个意思是 私有的 还有两个是 public 和 protect

struct stu
{
    void test1(int a)
    {  
        _a = a;      
    }
    int test2()
    {
        ;
    }
    int _a;
    int _b;
    int* _c;
};
int main()
{
    stu tmp;
    tmp.test1(10);
    tmp._b=10;
}


这里我们的 _a 和 _b都被我们赋值成了 10 一个是通过函数 一个在类外面直接赋值 大家想想如果这里我把struct stu 换成 class stu 又会怎样呢?它会不会报错呢?

class stu
{
    void test1(int a)
    {  
        _a = a;      
    }
    int test2()
    {
        ;
    }
    int _a;
    int _b;
    int* _c;
};
int main()
{
    stu tmp;
    tmp.test1(10);
    tmp._b=10;
}


答案肯定是会报错的,不知道大家看出来他们两个之间的差别了嘛?

我们的struct定义的类,它里面都是默认为共有的,是可以随便访问的

class定义出来的类,它里面都是默认为私有的,是不可以在类外访问的

class stu
{
public:
    void test1(int a)
    {  
        _a = a;      
    }
    int test2()
    {
        ;
    }
    int _a;
    int _b;
    int* _c;
};
int main()
{
    stu tmp;
    tmp.test1(10);
    tmp._b=10;
}


 改成这样就是正确的了(当然我们的struct也是可以加访问限定符的哦),我们通常的写法是把成员变量用private封装起来,不让你随便访问改变我们的值(因为如果改变了是很有可能影响到我们写的函数的功能的),但如果说有些变量是我们常常访问的,也是可以把它放到 public 里面去的

 我们的一个访问限定符限制的范围是从当前的位置到下一个访问限定符截至或者是到末尾截至,至于protect大家学习到继承(面向对象的三大特性:封装、继承、多态)就知道了


在了解class和struct的区别中,我们也了解了一下封装,封装大家可以理解为本质是一种管理 封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现的细节,仅对外公开接口来和对象进行交互


类的作用域:

  我们定义出来的类,也相当于是定义了一个新的作用域,注意这里是一个作用域,作用域的特点有什么,我们在不同的作用域内是可以有同名函数同名变量的哦,我们一般都叫类定义出来的域叫 类域


  既然有了一个类域,当我们想要在这个域的外面,定义函数的时候该怎么办呢?这个时候 :: 这个域作用限定符就可以了

class stu
{
public:
  void test1(int a);
  int test2(char ch);
private:
  int _a;
  char _b;
};
void stu::test1(int a)
{
  _a = a;
}
int stu::test2(char ch)
{
  _b = ch;
}

   我们这里使用了域作用限定符,就不属于是在类外访问变量的错误做法,我们这里已经表明了我们是这个域里面的,所以可以这样在类外定义函数,像上面我们写得在类外操作私有成员就是不行的


 注意:我们在类里面定义的函数都是 内联函数,注意是类里面定义的才是哦,所以根据内联函数的特性,我们一般,短小的函数可以直接在类里面定义,长一点的函数就可以选择在类外定义,当然这个不是标准看个人习惯

3c604d07159a4db09c35f3e9a8cc4511.png

注意:我们在类里面定义的函数满足内联函数的特性,内联只是给编译器的一个建议,如果函数篇幅较长,就不会去展开它,而是去调用

目录
相关文章
|
搜索推荐 Java
【JavaSE专栏59】方法重写的概念及优先级问题,面向对象的多态性机制
【JavaSE专栏59】方法重写的概念及优先级问题,面向对象的多态性机制
|
2月前
|
编译器 C++
【C++】面向对象编程的三大特性:深入解析多态机制(一)
【C++】面向对象编程的三大特性:深入解析多态机制
|
2月前
|
存储 编译器 C++
【C++】面向对象编程的三大特性:深入解析多态机制(二)
【C++】面向对象编程的三大特性:深入解析多态机制
|
2月前
|
存储 编译器 C++
【C++】面向对象编程的三大特性:深入解析多态机制(三)
【C++】面向对象编程的三大特性:深入解析多态机制
|
2月前
|
存储 编译器 C++
【C++】面向对象编程的三大特性:深入解析继承机制(三)
【C++】面向对象编程的三大特性:深入解析继承机制
|
2月前
|
编译器 C++
【C++】面向对象编程的三大特性:深入解析继承机制(二)
【C++】面向对象编程的三大特性:深入解析继承机制
|
2月前
|
安全 程序员 编译器
【C++】面向对象编程的三大特性:深入解析继承机制(一)
【C++】面向对象编程的三大特性:深入解析继承机制
|
7月前
|
Serverless PHP
当谈论面向对象编程时,这四个概念是非常重要的。以下是对接口、继承、封装和多态的简要说明
本文介绍了面向对象编程的四个核心概念:接口、继承、封装和多态。接口定义对象的行为规范,类通过实现接口确保符合所需行为。继承允许在已有类基础上创建新类,实现代码重用。封装是将数据和操作捆绑并隐藏内部细节,提高安全性和可维护性。多态使对象在运行时能表现出不同行为,增加代码灵活性和可扩展性。文中还提供了代码示例来说明这些概念。
53 0
|
7月前
掌握面向对象程序设计继承和派生机制的概念
掌握面向对象程序设计继承和派生机制的概念
48 0
|
存储 编译器 C++
C++中的多态机制
C++中的多态机制
下一篇
DataWorks