【C++笔记整理—第1期】

C++笔记整理

本系列是C++语言基础语法的学习笔记整理。

文章目录

结构体

C++不同于C的结构体的定义:结构体中不仅可以包括数据,又可以包括函数

定义及初始化

c 复制代码
struct Student{
    int age;
    char name[20];
    float score;
};
//这相当于定义了一个类型,然后就可以实例化,只定义并不分配实际的内存单元
Student student1 = {23, "JinLong", 93.5};

//方法2,在定义结构体的时候就实例化
struct Student{
    int age;
    char name[20];
    float score;
}student1 = {23, "JinLong", 86.5};

结构体数组

c 复制代码
#include <iostream>
#include <string>

//定义一个结构体,代表书籍信息
struct Book {
	std::string title;  // 书名
	std::string author; // 作者
	int year;  // 出版年份 
};

int main() {
	// 创建一个Book结构体数组
	Book library[3];
	
	//初始化数组中的元素
	library[0] = {"C++ Primer", "Lippman", 2012};
	library[1] = {"The C++ Programming Language", "Bjarne Stroustrup", 2013};
    library[2] = {"Effective Modern C++", "Scott Meyers", 2014};
    
    //输出每本书的信息
	for(int i = 0; i < 3; i++) {
		std::cout << "Book: " << i + 1 << ":\n";
		std::cout << "Title: " << library[i].title << "\n";
	} 
	
	return 0;
} 
```
### 指向结构体变量的指针

一个结构体变量的指针就是存储该变量的起始地址

~~~c++
struct Student{
    int age;
    string name;
};
Student stu;
Student *p = &stu;
//则此时的(*p)就是只想该结构体变量

用指向结构体变量的指针构成链表

一般链表中的节点包含的数据包括两部分,一部分是用户实际需要的数据,另一部分是下一个节点的地址,这样的好处是,各个节点的地址不一定要相邻,通过上一个节点中存储的地址就可以找到下一个节点。

这一个也需要编程复现。

函数传参的三种形式

动态分配和撤销内存空间

不同于C语言中利用malloc和free来分配和撤销内存空间,C++提供了运算符new和delete来取代,注意是运算符。

c 复制代码
int p* = new int(3);  // 表示分配一个int大小的内存空间,返回首元素的地址,然后通过指定的指针,指向该地址。
delete 指针变量;
delete [] 指针变量; // 对数组

用typedef声明新的类型名

c 复制代码
typedef int INTEGER;
INTEGER a = 1;

类和对象

概述

面向对象的程序的基础是类,类也就是一个对象,对象包括数据和行为。下面是四个概念:

对象和类、封装与信息隐蔽、抽象、继承于重用、多态性

特点

类和对象的作用

一组数据是与一组操作相对应的,如果把二者独立开来,对应成一组数据,多组操作或者多组数据,一组操作,此时就是面向过程的语言,它主要是以算法函数为核心。但是面向对象的语言,一般是以对象作为基础,也可以说为基于类的语言,通过信息对多个对象进行调用,就构成了程序。

面向对象的软件工程

  • 面向对象分析OOA:归类
  • 面向对象设计OOD:类需要的属性和行为描述。
  • 面向对象编程OOP:选择编程语言实现OOD的描述
  • 面向对象测试OOT:以类作为测试的基本单元进行测试
  • 面向对象软件维护OOSM

类的声明和对象的定义

类是对象的抽象,而对象是类的具体实例

声明类类型

c 复制代码
class Student
{
    int num;
    char sex;
    void display()
    {
        cout << "sex:" << sex <<endl;
    }
};
Student stu1, stu2;
//一般形式
class 类名
{
    public:
    	公用的数据和成员函数
    private:
    	私有的数据和成员函数
}

类的成员函数

在类外定义成员函数

这种做法不同于python中的做法,在C++中,可以在一个类中先声明成员函数,然后在类的外部在详细定义该函数,只不过需要指定定义域。

c 复制代码
class Student
{
    public:
    	void display();  //private也可以声明,也可以实现内部声明,外部实现,只是限定了访问权限
    private:
    	int num;
    	string name;
};
void Student::display()
{
    cout << "num:" << num <<endl;
};
Student stu1, stu2;

成员函数的存储方式

一般一个类占用的而存储空间的大小只和定义的数据的大小有关系,成员函数的代码段的存储方式是相同的,都不占用对象的存储空间。

在逻辑上,可以说该对象的成员函数,比如某某对象的成员函数。

在内存管理上,成员函数的存储方式,不存放在对象的空间内。

但是从逻辑上,成员函数适合数据一起封装在一个对象中的,通过设立一个专门的this指针,来区分不同对象使用相同的成员函数。

相关推荐
nnsix2 分钟前
Unity PicoVR 开发环境搭建
笔记
像名字一样难取的昵称2 分钟前
Linux学习笔记:十八、Linux文件的压缩,解压缩一站式学习
linux·运维·笔记·学习·ubuntu·ssh
缺点内向6 分钟前
如何在 C# 中将 Word 文档转换为 EMF(增强型图元文件)
开发语言·c#·word·.net
少年、潜行7 分钟前
F1C100/200S学习笔记(2)-- 初次FLASH启动(裸机)和SD卡启动(Linux)
linux·笔记·f1c200s
老华带你飞8 分钟前
学生宿舍管理|基于java + vue学生宿舍管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
雍凉明月夜9 分钟前
深度学习网络笔记Ⅰ(CNN)
网络·笔记·深度学习·神经网络·学习·cnn
Filotimo_16 分钟前
在java后端开发中,redis的用处
java·开发语言·redis
todoitbo31 分钟前
告别复杂笔记软件!Memos+cpolar,让你的笔记随时随地可用
网络·笔记·内网穿透·cpolar·软件·memos
superman超哥32 分钟前
仓颉Option类型的空安全处理深度解析
c语言·开发语言·c++·python·仓颉
MyBFuture35 分钟前
C# 哈希表与堆栈队列实战指南
开发语言·windows·c#·visual studio