标准输入输出流,面向对象,构造函数

news2025/3/12 12:42:25

标准输入输出流

为什么不直接用printf和scanf?

不能输入/输出C++新增的内容

std

C++的一些标识符,都是定义在std这个名字空间下面

cout

是什么?

1.是一个ostream对象
output stream:输出流
使用
<<:输出流运算符
作用:将右边的数据,给左边


基本形式:
	cout << 内容 << '\n';
	cout << 10 << endl;
	cout << 1.23 << a << b << "qwe";

分成多行:
	

特点

自动根据输出的内容,判断数据类型

特殊标志

C++ cout格式化输出(输出格式)完全攻略 - C语言中文网

*dec	以十进制形式输出整数	常用
hex		以十六进制形式输出整数
oct		以八进制形式输出整数
setw(w)	指定输出宽度为 w 个字符,或输人字符串时读入 w 个字符
setprecision(n)	设置输出浮点数的精度为 n。
showbase	输出表示数值的进制的前缀
输出地址
输出char *,cout会当成字符串进行输出

1. cout << &str << endl;
2. cout << (int *)str << endl;

cin

是什么?

1.是一个istream对象
input stream:输入流

>>: 输入流运算符
作用:将左边的数据,给右边

cin >> a;
特点

1.自动判断数据类型

2.类型不匹配,输入不成功

3.默认的间隔符:空格,TAB,回车。cin不能直接获取

特殊用法

scanf也可以获取空格

get(buf, 100, '\n')
不传结束符,默认是\n
在输入结束后,不会丢弃结束符

---------------------------------
getline和get用法是一样的
在输入结束后,丢弃结束符

cin.get获取空格
在这里插入图片描述

定义一个学生结构体,学生信息的数据类型
(struct)是一种用户自定义的数据类型
struct student
{
	int id;
	char name[20];
	int socre;
};
封装函数,实现打印学生信息,根据学生成绩排序
#include <iostream>

using namespace std;
const int n = 3;

/*
void fun()
{
      cout << "请输入整数:";
      int a = 0;
      cin >> a;
      cout << "a:" << a << endl;
}
void fun1()
{
    cout << "请输入一个字符串:";
    char str[100] = "";
    //cin.get(str,100,'\n');
    cin.get(str,100);
    cout << str;
}
*/
typedef struct student
{
    int id;
    char name[20];
    int score;
}stu;

void show_stu(stu *arr)
{
    for(int i=0;i<n;i++)
    {
        cout << "id:" << arr[i].id << "\t"
             << "name" << arr[i].name << "\t"
             <<  arr[i].score << endl;
    }
}

void stu_sort(stu *arr)
{
    int i, j;
    stu temp;
    for(i=0;i<n-1;i++)//外循环
        {
            for(j=0;j<n-i-1;j++)//内循环
            {
                if(arr[j].score>arr[j+1].score)
                {
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
}

int main()
{
    //fun();
    //fun1();

    stu arr[n];
    for(int i=0;i<n;i++)
    {
        cout << "请输入id,name,socre :";
        cin >> arr[i].id >> arr[i].name >> arr[i].score;
        cout << endl;
    }

    show_stu(arr);
    stu_sort(arr);
    show_stu(arr);
    return 0;
}

面向对象

特性

1.抽象

​ 数据抽象:用变量描述事物的属性/状态

​ 代码抽象:用函数描述事物的行为

2.封装

​ 将属性和行为,封装到一起组和成一个整体。共同描述一个事物。

​ 可以用权限进行修饰

3.分类

​ 层层分类,使概念逐渐细化、具体化。

4.继承

​ 子类(派生类)可以继承父类(基类)的属性和方法。

5.多态

​ 一个行为,多种状态。

三大特性

封装
继承
多态

封装

描述一个事物的抽象概念
一种自定义的数据类型
一个概念

----------------
类似于是一个结构体类型
表现形式
class 类名
{
public:
	属性、行为
protected:
	属性、行为
private:
	属性、行为
};

对象

类的实例化


--------------------
类似于是结构体变量
表现形式
类名 对象名;
访问内容
对象.内容

对象指针->内容

权限修饰符

类内访问:在成员函数里面进行访问

类外访问:通过对象/指针,只要不在类内的作用域

public:公有权限

​ 访问,可以在类内访问,也可以在类外访问

​ 继承,可以被继承

protected:保护权限

​ 访问,可以在类内访问,不能在类外访问

​ 继承,可以被继承

private:私有权限

​ 访问,可以在类内访问,不能在类外访问

​ 继承,不能被继承

一般

属性用private/protected修饰
行为用public修饰

C++的结构体

基本上和类没有差别.
构造函数
继承

区别

结构体:

​ 默认是public权限

​ 继承默认是public权限

类:

​ 默认是private权限

​ 继承默认是private权限

$$$构造函数

概念

在对象被创建时,自动调用的函数

特点

1.不能主动调用

2.构造函数和类名必须同名

3.没有返回值,没有数据类型标识

4.如果用户不写,编译器会自动生成。空的无参构造。

分类

无参构造
没有形参的构造函数
有参构造
有形参的构造函数
缺省构造
形参有默认值


如果是全缺省构造,形参全有默认值。
不能和无参构造同时存在
$$$拷贝构造
拷贝另一个对象的内容
浅拷贝

是编译器默认提供的拷贝构造函数

按bit位进行拷贝,数值是一模一样的

问题:

​ 1.如果原对象有指针/堆区空间。新的对象和原来的对象指向的空间是一样的。

​ 如果不delete,造成内存泄漏。

​ 如果delete,可能会回收很多次。

深拷贝

就是用户自己写的拷贝构造函数

应该,手动开辟堆区空间/手动指针赋值

移动构造

限制构造

表现形式

0.无参
	类名 对象名;
	
1.括号
	类名 对象名();
	类名 对象名(实参);
	类名 对象名(对象);	// 拷贝构造
	
2.显示声明
	类名 对象名 = 类名(实参);
	
3.隐式声明
	类名 对象名 = {内容};
	类名 对象名 = 对象;	// 拷贝构造

初始化列表

表现形式
构造函数():属性(形参)
{

}
作用

1.对属性进行初始化

2.对基类的构造函数传参

3.对组合类对象构造函数传参

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PowerBI 矩阵 列标题分组显示(两行列标题)

先看效果 数据表如下&#xff1a; 我们在powerbi里新建一个矩阵&#xff0c;然后如图加入字段&#xff1a; 我们就会得到这样的矩阵&#xff1a; 我们在“可视化”->“列”&#xff0c;上双击&#xff0c;输入空格&#xff0c;就能消除左上角的"类别"两字 同理修…

服务器部署DeepSeek,通过Ollama+open-webui部署

1. 安装ollama 1.1. linux 安装 Ollama是目前常用的AI模式部署的第三方工具&#xff0c;能一键部署deepSeek Ollama官方网址https://ollama.com/ 选择Download下载对应的服务版本 服务器选择Linux&#xff0c;下面是下载代码 curl -fsSL https://ollama.com/install.…

Ubuntu 连接 air pods

&#xff11;&#xff0e; sudo vim /etc/bluetooth/main.conf , 修改蓝牙模式为blder &#xff12;&#xff0e;sudo /etc/init.d/bluetooth restart, 重启蓝牙&#xff0c;即可连接成功

民用无人驾驶航空器操控员考试

1. 注册 民用无人驾驶航空器综合管理平台 (caac.gov.cn) 2. 选择 操控员资质 3. 安全操控理论培训 -> 在线视频培训 学习完后选择 【在线考试】 共 50道 单项 选择题&#xff0c;每选项3个&#xff0c;80分及格。 4. 查看 我的合格证 证书有效期2年

002 第一个python程序

编程语言 编程语言可以做的事情&#xff1a; 网站开发、软件 、游戏、APP、 小程序、 爬虫、 数据分析、脚本 第一个python程序 找到IDE图标pycharm 新建项目 选择项目路径 创建目录 新建python文件 输入代码 运行程序查看结果 print 介绍 print : 输出内容…

解锁机器学习核心算法 | 决策树:机器学习中高效分类的利器

引言 前面几篇文章我们学习了机器学习的核心算法线性回归和逻辑回归。这篇文章我们继续学习机器学习的经典算法——决策树&#xff08;Decision Tree&#xff09; 一、决策树算法简介 决策树算法是一种典型的分类方法&#xff0c;也是一种逼近离散函数值的方法。它的核心思想…

数据结构——顺序表与链表

目录 前言 一线性表 二顺序表 1实现 2相关面试题 2.1移除元素 2.2删除有序数组中的重复项 3.3合并两个有序数组 3问题 三链表 1链表的分类 1.1单向或者双向 1.2带头或者不带头 1.3循环或者非循环 2实现 2.1尾插与头插 2.2尾删与头删 2.3pos前插入节点与删除…

在 Python 中使用 Ollama API

文章目录 一、环境准备二、使用方法1.简单对话2.流式响应3.结构化输出4.自定义客户端4.1 同步客户端4.2 异步客户端4.3 同步 & 异步客户端不同调用次数耗时对比测试 三、常用的ollama API 接口聊天生成本地模型列表显示模型信息创建模型复制模型删除模型拉取模型推送模型生…

BGP配置华为——RR反射器配置

实验拓扑 与之前实验同理将loop0作为routerID使用&#xff0c;且R1和R2上用loop1接口用于模拟用户其他网段 实验要求 1&#xff0c;在AS100内运行OSPF协议 2.配置路由反射器&#xff0c;使得从R1进入的数据能够反射到全局网络 3.在R1和R2上分别宣告自己的loop1口网段用于观…

一.AI大模型开发-初识机器学习

机器学习基本概念 前言 本文主要介绍了深度学习基础&#xff0c;包括机器学习、深度学习的概念&#xff0c;机器学习的两种典型任务分类任务和回归任务&#xff0c;机器学习中的基础名词解释以及模型训练的基本流程等。 一.认识机器学习 1.人工智能和机器学习 人工智能&am…

力扣做题记录 (二叉树)

二叉树 打算先来了解二叉树基础&#xff0c;都是简单题&#xff0c;目的是熟悉代码格式和解题基础思路。 1、二叉树最大深度 二叉树最大深度 方法一、深度搜索 直接用原函数做递归&#xff0c;比较简单 /*** Definition for a binary tree node.* struct TreeNode {* …

前端里的this指向问题

目录 1.代码输出结果 2.代码输出结果 3.代码输出结果 4.代码输出结果 5.代码输出结果 6.代码输出结果 7.代码输出结果 8.代码输出结果 9.代码输出结果 10.代码输出结果 11.代码输出结果 12.代码输出结果 13.代码输出结果 14.代码输出结果 总结 1.代码输出结果 f…

黑马Redis详细笔记(实战篇---短信登录)

目录 一.短信登录 1.1 导入项目 1.2 Session 实现短信登录 1.3 集群的 Session 共享问题 1.4 基于 Redis 实现共享 Session 登录 一.短信登录 1.1 导入项目 数据库准备 -- 创建用户表 CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,phone …

基于N-gram模型的中文文本分析系统设计与实现

前言 在数字化人文研究快速发展的背景下&#xff0c;中文古典文本的量化分析面临着独特的挑战。古典文献中繁简异体字共存、语义单元边界模糊、意象隐喻密集等特征&#xff0c;使得传统的词频统计方法难以准确捕捉其深层语言规律。现有文本分析工具多面向现代汉语设计&#xff…

零基础购买阿里云服务器,XShell连接云服务器

目录 1.环境搭建方式 2. 使用云服务器 3.使用终端软件登录到Linux 4.使用XShell登录主机 5.连接失败的原因&#xff1a; 下一篇更新&#xff1a;Linux的基础指令以及如何Linux的环境搭建 1.环境搭建方式 主要有四种: 1.直接安装在物理机上&#xff0c;虽然Linux有图形化…

CNN手写数字识别1——模型搭建与数据准备

模型搭建 我们这次使用LeNet模型&#xff0c;LeNet是一个经典的卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;架构&#xff0c;最初由Yann LeCun等人在1998年提出&#xff0c;用于手写数字识别任务 创建一个文件model.py。实现以下代码。 源码 #…

深度学习04 数据增强、调整学习率

目录 数据增强 常用的数据增强方法 调整学习率 学习率 调整学习率 ​调整学习率的方法 有序调整 等间隔调整 多间隔调整 指数衰减 余弦退火 ​自适应调整 自定义调整 数据增强 数据增强是通过对训练数据进行各种变换&#xff08;如旋转、翻转、裁剪等&#xff09;&am…

PH热榜 | 2025-02-16

1. Cal.com Routing 标语&#xff1a;根据客户线索&#xff0c;系统会智能地自动安排约会。 介绍&#xff1a;告别繁琐的排期&#xff01;Cal.com 推出了新的路由功能&#xff0c;能更智能地分配预约&#xff0c;让你的日程安排更顺畅。这项功能运用智能逻辑和深入的数据分析…

数据库基本概念及基本使用

数据库基本概念 什么是数据库&#xff1a; 数据库特点&#xff1a; 常见的数据库软件&#xff1a; 不同的公司进行不同的实践&#xff0c;生成了不同的产品。 比如买汽车&#xff0c;汽车只是一个概念&#xff0c;你要买哪个牌子哪个型号的汽车&#xff0c;才是真正的汽车的一…

gozero实现数据库MySQL单例模式连接

在 GoZero 框架中实现数据库的单例连接可以通过以下步骤来完成。GoZero 使用 gorm 作为默认的数据库操作框架&#xff0c;接下来我会展示一个简单的单例模式实现。 ### 1. 定义数据库连接的单例结构 首先&#xff0c;你需要定义一个数据库连接的结构体&#xff0c;并在初始化…