C++入门学习10 面向对象

面向对象编程 难点
类和对象
类的成员变量
访问修饰符
构造与析构函数 重点
this指针 重点

面向对象

所谓面向对象就是基于对象的概念,以对象为中心,以类和继承为构造机制,来认识,理解,刻画客观世界和设计,构建相应的软件系统(模拟现实)
1.对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系 (对象由数据和属性组成)
2.面向对象不是某一种语言的特性,而是一种编程思想。在这里插入图片描述

抽象和类 处理复杂度的方法—抽象和简化

抽象:从具体事物抽取共同的本质特征
C++中的类

  • 类是一种将抽象转换为用户定义类型的工具
  • 将数据表示和操纵数据的方法组合成一个整体
  • 类的实例称为对象
  • 类中的变量和函数称为成员
  • 在这里插入图片描述
    -类的声明和使用
    在这里插入图片描述
    类的定义一般是在头文件里面定义。 或者是重新建立一个类。
    建立一个类文件:

在这里插入图片描述

实际开发中,.h文件 实现文件对应.cpp文件
一般在类中直接书写类的定义和实现的时候都是用.hpp文件
如果导入本地文件夹的时候就是双引号,不是尖扩号 在这里插入图片描述
类的首字母一般都大写
.h 和.hpp文件区别
.h文件
在这里插入图片描述
建议在.h文件中只声明(定义)函数,不实现函数

.hpp文件
在这里插入图片描述
在这里插入图片描述
函数在.h中声明,在.cpp中实现,写在对应的地方
第一种方式:.hpp
在这里插入图片描述
在这里插入图片描述
第二种方式:.h 文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问修饰符:
常见的访问修饰符:
public:修饰的成员在任意地方都可以访问
private:修饰的成员只能够在类中或者友元函数中访问
protected:修饰的成员可以在类中函数,子函数及友元函数中访问
在这里插入图片描述
实操 —实现封装
在这里插入图片描述
报错,私有。 需要调用函数-封装来解决问题
再次建立一个函数解决。如果函数比较小,直接建立内联函数解决。或者通过.cpp里面定义函数进行解决。
在这里插入图片描述
封装过程
在这里插入图片描述

#ifndef LANDOWNERV3_H
#define LANDOWNERV3_H
#include <iostream>
using namespace std;

//用来掩饰封装的基本概念
class LandOwnerV3
{
    //省略了private

        long score; //积分
        int cards[20];   //解决积分被赋值为负数错误的方法:将成员变量score进行隐藏并封装

    public:
        string name;

        LandOwnerV3();
        int cardCount;
        virtual ~LandOwnerV3();
        void ShowScore();

        //使用方法/函数实现对成员变量的封装Get/Set 方法
        void SetScore(long lScore)
        {
            if( lScore < 0 )
          {
                   //如果传入的积分是非法情况,那么积分默认为0
               score = 0;
          } else
          {
         //积分为正数时,才进行赋值操作------这里就通过条件判断,封装了score的赋值过程
                score = lScore ;

          }

        }
    protected:


};

#endif // LANDOWNERV3_H

#include "LandOwnerV3.h"

LandOwnerV3::LandOwnerV3()
{
    //ctor
}
void LandOwnerV3::ShowScore()
{
    cout << name << "得了"  << score << "分" << endl;
}

#include <iostream>
//#include "LandOwner.hpp"  //如果要使用类,那么必须包含类的头文件
#include "LandOwnerV3.h"
using namespace std;

int main()
{
  LandOwnerV3 landOwner3;
    landOwner3.name = "巴依老爷";
    //注意:模拟为地主修改积分
    //landOwner3.score = -100;   若不加函数则是会显示-100;

    landOwner3.SetScore(-100);
    landOwner3.ShowScore();


    return 0;
}

使用工具自动生成Get/Set方法
在这里插入图片描述
把数据类型 名称 输进去
在这里插入图片描述
在这里插入图片描述
注意一般私有的,就是会有下划线
在这里插入图片描述

在这里插入图片描述
打印的话,使用循环打印。
在这里插入图片描述
:: 这是作用域解析运算符。

构造函数

(构造函数是给编译器看的,不管你利用还是不利用,程序都会给他默认的。)

  • 以类名作为函数名

  • 无返回值类型
    作用:

  • 初始化对象的数据成员 -------给编译器看(程序员是觉得既然自己生成,是不是可以利用一下)

  • 类对象被创建时,编译器为对象分配内存空间并自动调用构造函数以完成成员的初始化。

  • 写很多代码-其实就是在操作内存,,,通过数据类型
    构造函数的种类:

  • 无参构造

  • 一般构造(重载构造)

  • 拷贝构造

无参构造
在这里插入图片描述
主函数中;
在这里插入图片描述
默认构造不管写不写都是存在的。

带参构造

在这里插入图片描述
通过给到带参构造函数的参数不同,然后会相应地使用函数。
不许参数类型相同,否则不能重载

初始化参数列表写法:

在这里插入图片描述
普通写法:
在这里插入图片描述
栈内存与堆内存
栈内存:存放一些基本的变量,整型,短整型等,在这里的内存是可以共享的,很快。放的东西不多
不要把所有的对象放在栈内存中
堆内存:能放很多–仓库

多多使用堆内存
使用空间:
在这里插入图片描述
在这里插入图片描述
栈内存中的会被析构函数清除,堆内存的不会被清除。-----堆内存的要使用delete释放内存。

析构函数
一般用来通知来销毁对象,他自己是没有办法销毁对象的。
在这里插入图片描述
一个new对应一个delete

使用类创建对象在这里插入图片描述

用不好之后,会发生内存溢出。

auto 在C++11 中可以使用,变量的推断使用。仅仅是个占位符,通过后面的来推断。一般不要使用auto,会浪费内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值