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

强化练习:银行与账户

空结构体与空类的大小(sizeof)为1,主要在于初始化/实例化时,编译器给变量/对象分配内存(地址),内存最小单位为1个字节。
通常,sizeof(类型) == sizeof(变量)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会为您提供一份细致的C++知识笔记,希望对您有所帮助。 1. C++语言概述 C++是一种面向对象的编程语言,它是C语言的扩展版本。C++可以用于开发各种类型的应用程序,包括操作系统、驱动程序、游戏、桌面应用程序、移动应用程序、Web应用程序等等。 2. C++基础语法 C++程序由函数组成,每个函数由一系列语句组成。C++程序从main函数开始执行,然后按照顺序执行函数中的语句。C++程序由头文件、全局变量、函数和类组成。头文件包含了程序所需的库函数和类定义。 3. C++数据类型 C++支持多种数据类型,包括整型、浮点型、字符型、布尔型等。整型数据可以是有符号或无符号的,浮点型数据可以是单精度或双精度的。C++还支持枚举类型和指针类型。 4. C++运算符 C++支持多种运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符等。算术运算符包括加、减、乘、除等。比较运算符包括等于、大于、小于等。逻辑运算符包括与、或、非等。 5. C++C++流是一种输入/输出机制,用于从文件、内存或其他设备中读取和写入数据。C++流由输入流和输出流组成,输入流用于读取数据,输出流用于写入数据。C++还支持格式化的输入/输出,可以按照特定的格式读取或写入数据。 6. C++函数 C++函数是一段可重用的代码,用于完成特定的任务。函数由函数名、参数列表和函数体组成。C++函数可以返回一个值或不返回任何值。函数可以被调用多次,可以在函数内部调用其他函数。 7. C++C++类是一种用户定义的数据类型,它封装了数据和函数。类具有属性和方法,属性表示数据,方法表示函数。C++类可以被继承,可以派生出新的类。C++类还支持多态性,可以使用相同的接口处理不同的数据类型。 8. C++异常处理 C++异常处理是一种处理程序错误的机制,用于在程序运行时捕获和处理异常。C++异常处理由try、catch、throw语句组成。try语句用于尝试执行一段代码,如果出现异常,则由catch语句捕获并处理异常。throw语句用于抛出异常。 以上是C++基础知识,还有很多高级特性和应用场景需要学习和掌握。希望这份笔记能够帮助您更好地理解C++语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值