主页 > 电脑硬件  > 

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

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

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

标签:

标准输入输出流,面向对象,构造函数由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“标准输入输出流,面向对象,构造函数