当前位置: 首页 > news >正文

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

标准输入输出流

为什么不直接用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.对组合类对象构造函数传参

相关文章:

  • Kafka集群,常见MQ面试问题
  • 聚簇索引和非聚簇索引
  • 蓝桥杯 Java B 组之栈的应用(括号匹配、表达式求值)
  • Python 2 和 Python 3 在字符串编码上的差异
  • java八股文之Redis
  • 政务浏览器API文档及Demo大升级
  • uniapp二次封装组件(py组件)
  • SQL复习
  • 微调codegeex
  • 跟着AI学习vue3第二章
  • 机器视觉--switch语句
  • 基于N-gram模型的中文文本分析系统设计与实现
  • 什么是关系数据库理论?(函数依赖,范式)
  • 轻量级5G核心网:适应未来网络需求的关键方案
  • 【第11章:生成式AI与创意应用—11.2 音频与音乐生成的探索与实践】
  • C程序设计(第5版)——谭浩强(1)
  • lazarus 从资源文件中加载PNG图片
  • 【SpringBoot】深度解析 Spring Boot 拦截器:实现统一功能处理的关键路径
  • 跟着李沐老师学习深度学习(十)
  • LabVIEW开发CANopen的TPDO数据读取
  • 找个做网站的/推广网站都有哪些
  • wordpress不同列表页/网站seo哪家做的好
  • 深圳网站建设大公司/今天
  • 外贸网站源码怎么建/产品推广的目的和意义
  • 旅游网站wordpress/设计网站官网
  • 室内设计效果图背景墙/seo网络推广知识