IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 从C到C++ -> 正文阅读

[C++知识库]从C到C++

从C到C++

引用

虽然在功能上比指针弱,但减少了出错的可能。
eg. 使用引用交换两个变量:

#include<iostream> 
using namespace std;

void swap2(int& a, int& b) { 
	int t = a; a = b; b = t; 
}
	
int main() { 
	int a = 3, b = 4; 
	swap2(a, b); 
	cout << a << " " << b << "\n"; 
	return 0; 
}
  • 在参数名之前加一个“&”符号,就表示这个参数按照传引用的方式传递。
  • 此时,在函数内改变的参数值,也会修改到函数的实参。
  • C++中的引用就是变量的“别名”,它可以在一定程度上代替C中的指针。
  • 使用“传引用”的方式让函数直接修改实参。

字符串 String

  • 对于String对象使用getline()函数可以一行一行读取数据(相当于C语言中的fegts,但无须指定字符串的最大长度)
  • 然后用这 一行创建一个“字符串流”——ss。接下来只需像读取cin那样读取ss即可
  • 可以把string作为流进行读写,定义在sstream头文件中
#include<iostream> 
#include<string> 
#include<sstream> 
using namespace std; 
int main() { 
	string line; 
	while(getline(cin, line)) { 
		int sum = 0, x; 
		stringstream ss(line); 
		while(ss >> x) sum += x; 
		cout << sum << "\n"; 
	}return 0; 
}

结构体

  • struct定义“纯数据”的类型,只包含较少的辅助成员函数
  • class定义“拥有复杂行为”的类型
#include<iostream>
using namespace std;

struct Point {
	int x, y;
	Point(int x = 0, int y = 0) : x(x), y(y) {}
};

Point operator + (const Point& A, const Point& B) {
	return Point(A.x + B.x, A.y + B.y);
}

ostream& operator << (ostream &out, const Point& p) {
	out << "(" << p.x << "," << p.y << ")" ;
	return out;
}

int main() {
	Point a, b(1,2);
	a.x = 3;
	cout << a+b << "\n";
	return 0;
  • 结构体Point中定义了一个函数,函数名也叫Point,但是没有返回值
  • 这样的函数称为构造函数(ctor)
  • 注意这个构造函数 的两个参数后面都有“=0”字样,其中0为默认值。也就是说,如果没有指明这两个参数的 值,就按0处理,因此Point( )相当于Point(0,0)。
  • “:x(x),y(y)”则是一个简单的写 法,表示“把成员变量x初始化为参数x,成员变量y初始化为参数y”。也可以写成: Point(intx=0,inty=0){this->x=x;this->y=y;} 这里的“this”是指向当前对象的指针。this->x的意思是“当前对象的成员变量x”,即 (*this).x。
  • 接下来为这个结构体定义了“加法”,并且在实现中用到构造函数。这样,就可以用a+b 的形式计算两个结构体a和b的“和”了
  • 最后,定义这个结构体的流输出方式,然后就可以用cout << p来输出一个Point结构体p 了。

模版

当数据类型变换后仍然可以使用,如设置为int就不能解决double类型。
可以通过template模版的方式对函数进行修改。

template<typename T>
T sum(T* begin, T* end) {
	T *p = begin;
	T ans = 0;
	for (T *p = begin; p != end; p++)
		ans = ans + *p;
	return ans;
}

累加操作为ans=ans+*p,而不是ans+=*p。因为Point结构体中只定义了运算符,没有定义+=
结构体和类(class)也可以是带模板的

template <typename T>
Point<T> operator + (const Point<T>& A, const Point<T>& B) {
	return Point<T>(A.x+B.x, Axy+B.y);
}
template <typename T>
ostream& operator << (ostream &out, const Point<T>& p) {
	out << "(" << p.x << "," << p.y << ")";
	return out;
}

这样就可以同时使用int型和double 型的Point.

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:12:28  更:2022-02-26 11:16:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:24:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码