C++笔记(基础2):类与对象

C++笔记(基础2):类与对象

1. 认识类与对象
  • 什么是类(class)?
    类(class)是类型(type),是用户自定义的类型。为什么不叫它type,因为借用Simula语言中的class关键字。

  • 为什么要有类?
    基于便利性的考虑,现实世界中物(object)通常被分为几种独立的分类。

  • 基本概念
    在这里插入图片描述

  • 面向对象四大特征
    在这里插入图片描述

2. 类的定义与对象创建
2.1 类的定义:与struct相似(C++)
class 类名{
   
    成员变量成员函数声明
};

class定义最后的;一定不要忘记。

  • 构成
    在这里插入图片描述
  • 实例:复数Complex
  • 作用域运算符:: – 函数归属
  • 访问限定符
    在这里插入图片描述

实践中,成员变量多数情况使用private或者protected,成员函数多数情况使用public。通常,通过成员函数改变对象的成员变量。

  • 类定义与类实现分离
  • 头文件 – 声明
    方式:#pragma once或者#ifnde...#endif
    作用:防止头文件二次编译
  • 源文件 – 实现
    引用头文件:#include <>(标准库函数)/#include ""(自定义/第三方函数)

在C++书籍中为了方便.h.cpp不做分离,但是项目开发中,需要分开。

  • 强化练习:账单Bill(名称、数量、单价、小计)

  • vector与string

  • classstruct区别
    struct_class.cpp

#include <iostream>

using std::cout;
using std::endl;

struct SPos {
   
    int x,y,z;
};
class CPos {
   
    int x,y,z;
};
int main(){
   
#ifdef STRUCT
    SPos spos = {
   1,1,1};
    cout << "(" << spos.x << "," << spos.y << "," << spos.z << ")" << endl;
#else
    CPos cpos = {
   1,1,1};
    cout << "(" << cpos.x << "," << cpos.y << "," << cpos.z << ")" << endl;
#endif
}

C++classstruct区别是:

  1. 默认的访问控制不同
    structpublicclassprivate
  2. struct可以使用花括号内的初始值列表{...}初始化,class不可以(C++98不可以,C++11可以)。

注意:

  • C++的struct可以有成员函数,而C不可以。
  • C++的struct可以使用访问控制关键字(public private protected),而C不可以。
  • C++的struct
SPos spos; // C++
struct SPos spos; // C/C++

成员变量默认初始化为随机值(主要影响指针)。

2.2 对象创建/实例化

直接创建 – 类作为类型定义变量 – 栈上创建

  • 例如:

基本类型

int main(){
   
    int a = 10;
    int b(10);
    cout << a << " " << b << endl;
}

基本类型的初始化新增语法:

int a(0);// 等价 int a = 0;
const float b(1.0);// 等价 const float b = 1.0;

类类型

// 定义类
class Demo{
   };
// 创建对象
int main(){
   
    Demo d; // 变量(命名对象)
    Demo(); // 匿名对象
}
  • 基本语法
类名 对象名;  // 调用默认构造函数
类名(); // 创建匿名对象

动态创建 – 堆上创建

  • 例如

基本类型

int* p = new int;
delete p;
p = NULL;

类类型

// 定义类
class Demo{
   };
// 创建对象
int main(){
   
    Demo* d = new Demo;
    delete d;
    d = NULL;
}
  • 基本语法
类名* 对象指针 = new 类名;// 调用默认构造函数
delete 对象指针;

对象指针new可以为对象设置初始值,例如下面代码

int* p = new int(100);
cout << *p << endl;

动态创建数组 – 堆上创建

  • 例如

基本类型

int* pa = new int[10];
delete pa;// 只释放p[0]
delete [] pa;// 释放全部数组

类类型

// 定义类
class Demo{
   };
// 创建对象
int main(){
   
    Demo* d = new Demo[10];
    delete [] d;
    d = NULL;
}

对象数组指针new不可以为对象设置初始值。

int* pa = new int[10](100); // error: array 'new' cannot have initialization arguments 

注意:C++除了特殊情况,很少直接使用malloc()/free()申请释放内存,取而代之的是new/delete

强化练习:银行与账户

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值