【从C到C++】------- C++基本编程


1.C++标准库介绍


【1】C++是C的超集

  • 一个典型C程序(后缀名.c)可以完全被视为C++程序来编译
  • C程序可以通过__cplusplus符号是否预定义来判断当前是gcc还是g++编译 __cplusplus的值是long int类型的,值表示当前编译程序的C++编译器的版本号。
  • 一个典型C++程序(后缀名.cpp)只能当C++程序来编译,可见C++是C的超集
  • C++文件名的常用后缀:源文件(.cpp .cxx .cc .c .c++),头文件(.hpp .hxx .h)
/* ----- a.c文件 ------ */

#include <stdio.h>

#ifdef     __cplusplus
#define 	USECPP   1
#else
#define     USECPP   0
#endif 

int main(int argc, char const *argv[])
{
	printf("USECPP = %d, __cplusplus = %ld\n",USECPP,__cplusplus);
	return 0;
}

在这里插入图片描述

【2】C++完全接收并兼容了C库

  • 典型C++程序中可以支持C的形式包含C库头文件,并直接使用C库API
  • C++更建议的头文件包含形式不是<stdio.h>这样,而是<cstdio>这样,C++的标准库的头文件是没有后缀名的
  • ubuntu中gcc工具链的头文件在/usr/include中,可以实际看看
    在这里插入图片描述

【3】C++标准库介绍

  • C标准库即为C++标准库的一部分,完全继承并以C++方式重写,位于std命名空间中
  • C++面向对象库,如string、iostream等,位于std命名空间中
  • C++ STL标准模板库,如vector、map等,位于std命名空间中

2.iostream的cout使用


【1】基本使用

  • cout即标准输出,对应stdout
  • cout定义在std命名空间中,要按命名空间的三种使用方法来用
  • 结合<<符号进行输出,可多节连接
  • cout涉及的头文件有<iostream> <iomanip> <bits/ios_base.h>
  • cout本质上是ostream(iostream的派生类)的一个对象
  • 流操作符<<本质上是左移运算符在iostream中的运算符重载
#include <iostream>

 using namespace std;

int main(int argc, char const *argv[])
{
	int val = 18;
	cout << "hello world" << "----" << val << endl;

	return 0;
}

在这里插入图片描述

【2】流操作符的格式化实例

  • cout现在主要用来输出调试信息,掌握主要用法和细节查询即可,不必去记。
#include <iostream>
#include <iomanip>
 using namespace std;

int main(int argc, char const *argv[])
{
	int val = 18, tmp = 19;

	cout << val << endl;   
	cout << hex << "0x" << val << endl;  
	cout << val << endl;   //还保持为16进制

	cout << dec << val << endl;  //又变成10进制

	/*结论:hex,dec等符号算子就是iostream内部维护的状态变量,设置后一直保持那个状态,更改输出状态需要重新设置*/

	double d = 12345.6789;
	cout << d << endl;
	cout << setprecision(5) << d <<endl;  //保留几位小数,从数字最开始的一位开始数,而不是从小数点开始往后数
	cout << setprecision(8) << d <<endl;  //使用setprecision(n)需要包含<iomanip>

	return 0;
}

在这里插入图片描述


3.iostream的cin使用


【1】基本使用

#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
	int val1, val2;

	cout << "please input num:" << endl;
	cin >> val1 >> val2;    //这里不要加endl,否则会报错
	cout << "tow num are:" << val1 << " ---- " << val2 <<endl;

	return 0;
}

在这里插入图片描述

【2】注意点

  • cpp中输入的时候不要使用引用符&
  • cin的输入会以空格为中断

4.C++用fstream读写文件


【1】fstream介绍

【2】fstream使用举例

  • API解析
//等号后面是默认参数,默认打开的文件为可读可写
void open( const char *filename,ios_base::openmode mode = ios_base::in|ios_base::out );

参数
filename - 要打开的文件名
mode - 指定打开模式。它是位掩码类型,定义下列常量:

常量 解释

常量意义
app每次写入前寻位到流结尾
binary以二进制模式打开
in为读打开
out为写打开
trunc在打开时舍弃流的内容
ate打开后立即寻位到流结尾
  • fstream文件读写实例
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char const *argv[])
{
	fstream fs;   //定义一个fstream对象,用于后续操作
	char  data[100];

	fs.open("1.txt",ios::app | ios::in | ios::out);   //ios::app表示追加内容,当没有1.txt时也可以自动创建
	if(!fs.is_open())
	{
		cout << "open 1.txt failed" << endl;
		return 0;
	}
	else
	{
		cout << "open 1.txt success" << endl;
	}

	cout << "please inpu string:" << endl;
	cin >> data;     //用户输入字符存到数组中

	fs << data;      //数据写入fs对象
	fs >> data;      //将数据从文件中读取出来

	cout << "file content is :" << data << endl;    //打印读取的文件内容

	fs.close();

	return 0;
}

在这里插入图片描述


5.C++字符串string类使用


【1】C++式字符串的基本使用

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char const *argv[])
{
	string s1,s2,s3;

	s1 = "abcttt";
	s2 = "def";
	s3 = s1 + s2;

	cout << "the length of s1 is :" << s1.size() << endl;
	cout << "the capatity of s1 is :" << s1.capacity() << endl;
	cout << "s1.append(s2) = " << s1.append(s2) << endl;
	cout << "s3 = " << s3 << endl;

	cout << "s1 = " << s1 << " " << "s2 = " << s2 << endl;
	s1.swap(s2);
	cout << "s1 = " << s1 << " " << "s2 = " << s2 << endl;

	return 0;
}

在这里插入图片描述

【2】C++字符串和C字符串的对比

  • C语言严格说没有字符串的概念,C字符串其实就是字符数组或字符指针
  • C++和之后的java等都有字符串,本质是一个class
  • C++字符串的优势是标准库自带可用于字符串的各种处理算法和方法
  • C++实际开发中建议使用C++字符串而不是沿用C式字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值