目录
1.头文件和命名空间?
2.C++中的标准输入输出(接图1.1)?
3.新的数据类型?
?4.C++函数思想
1.头文件和命名空间
?
#include<stdio.h>
//#include<cstdio> //C++包含c语言中的标准库的时候
#include<iostream> //C++中的标准输入输出头文件,类似c中的stdio.h
namespace MM{
//空间中成员(数据)
int a=1;
void print(){
printf("MM中的函数\n");
}
}
namespace GG{
int a=2;
void print(); //空间中声明
}
//空间外实现
//::作用域分辨符 ::后面的东西是从 ::前面来的
void GG::print(){
printf("GG中的函数\n");
}
//空间名的嵌套与空间内容访问(剥洋葱)
namespace A{
int aa = 1;
namespace B{
int bb = 2;
}
}
void visitedNamespace(){
A::aa = 1; //访问aa
A::B::bb = 5; //访问bb
using namespace A::B; //nsing语法的使用
bb = 123;
using namespace A;
aa = 124;
B::bb = 125;
}
int xx = 1; //全局变量
int main(){
int xx = 2;
printf("%d\n", xx); //采用就近原则:2
printf("%d\n", ::xx); //采用全局变量:1 ::作用1:用来标识全局变量
//::作用2:用空间名限定去访问
printf("%d\n", MM::a); //访问MM中的a
printf("%d\n", GG::a);
MM::print();
GG::print();
//using语法,可省前缀(只在当前作用域下有效)
using namespace MM;
printf("%d\n", a); //MM中的东西
print(); //MM中的东西
//使用using namespace时不要存在二义性
using namespace GG;
//a=13; //二义性,MM和GG中都有a
GG::a = 123; //指定a从哪来
while (1);
return 0;
}
2.C++中的标准输入输出(接图1.1)
?
#include<iostream> //C++的输入输出头文件
using namespace std; //一般写这里,避免std的前缀使用
//C++标准输入输出
void testCinCout(){
//cout输出1.基本变量打印不需要格式控制
cout << "ILoveyou\n";
char str[] = "ILoveyou\n";
cout << str;
//2.打印多个数据
int a = 1;
float b = 1.1;
cout << a << "\n" << int(b) << "\n";
//3.隐式转换:C和C++一样
int g = 2.567;
cout << g<<"\n";
//4.C++换行:可用关键字endl替换"\n"
cout << a <<endl<< int(b) << endl;
//cin输入
int iNum = 3;
float fNum = 3.6f;
cout << "请输入一个整数,一个浮点数,一个字符串:";//中间用空格或回车隔开
cin >> iNum >> fNum >> str;
cout << iNum << "\t" << fNum << "\t" << str << endl;
}
//字符串输入空格问题
void testStr(){
char str[10] = "";
//不带空格的输入
cin >> str;
cout << str;
//带空格的输入--->了解
cin.getline(str, 10);
cout.write(str, 10);
//while (getchar() != '\n');//字符和字符串输入前,做了输入
char c;
cin >> c;
cout << c;
}
int main(){
//testCinCout();
testStr();
while (1);
return 0;
}
3.新的数据类型
?
#include<iostream>
using namespace std;
//bool类型
void testBool(){
bool bNum = 123;//bool类型输出只有1和0
cout << bNum << endl;//输出1
bNum = false;
bNum = true;
cout << bNum << endl;
//boolalpha 用true和false方式打印bool类型
cout << boolalpha << bNum << endl;
}
//指针中的NULL,C++中用 关键字:nullptr代替
void testnullptr(){
int* p = nullptr; //NULL
char* pc = NULL;
}
void printStr(const char* str){//形参要用const修饰
cout << str << endl;
}
//引用类型:& 理解为取别名(不是取地址)
void testQuote(){
//1.基本引用
int a = 1;
//类型& 别名=真名
int& a1 = a;
a1 = 345;
cout << a << endl; //输出为345
//2.C++中常量要求更严格,要用const修饰
printStr("ILoveyou");
char str[] = "ILoveyou";
printStr(str);
//3.常引用
//int& x = 1; //报错,没有用const修饰
int aa = 1;
const int& x = 1; //第一种写法:const修饰
const int& x2 = aa; //可以给左值起别名,给aa起别名x2
//右值引用,只能给右值起别名
int&& b = 1; //常量是右值(运算符的右边)
//int&& b1 = b; //报错,给b起别名b1,不行,&&右值引用只能给右值起别名
}
//引用一般用在哪?1.函数参数
void modifyA(int a){ //形参a=1001 并没有改变 实参aa=1的值,形参!=实参
a = 1001;
}
void modifyB(int& a){ //int& a(形参)改变了aa(实参),加了引用&后 形参=实参
a = 1002;
}
void swap(int& a, int& b){ //swap:交换,加了引用&后 形参=实参
int temp = a;
a = b;
b = temp;
}
//1.1函数参数之指针的引用
int g_num = 1001;
void modifyPointA(int* p){ //无效,形参p=1001 并没有改变 实参pa=1008的值
p = &g_num;
}
void modifyPointB(int*& p){ //有效,形参p=1001 改变了 实参pa=1008的值,输出为1001,int*& p(形参)=pa实参
p = &g_num;
}
//右值引用
void printRightValue(int&& a){
a += 11; //增加一个可以修改的功能
cout << a << endl;
}
//常引用
void printRight(const int& a){
//a += 11; //报错,常引用不能修改
cout << a << endl;
}
//不返回引用,返回值就是一个值,这个值只能是右值
int getData(){
return g_num;
}
//返回全局变量g_num的引用,增加左值使用
int& getValue(){
return g_num;
}
//使用引用
void useQuote(){
//当作函数参数使用
int aa = 1; //实参aa
modifyA(aa); //拷贝本
cout << aa << endl; //输出为1,不是1001
modifyB(aa);
cout << aa << endl; //输出为1002
int bb = 22;
swap(aa, bb); //交换1002和22
cout << aa << "\t" << bb << endl;
//当作函数参数使用之指针的引用
int pa = 1008;//实参pa
int* p = &pa;
modifyPointA(p);
cout << *p << endl; //还是1008,modifyPointA(p)中的1001并没有传进来
modifyPointB(p);
cout << *p << endl; //这个B函数输出的才是形参p=1001
printRightValue(18); //输出29:18+11
printRight(19); //输出19
//返回值就是一个值,这个值只能是右值
//getData() = 9; //报错,参照1=2,2不能赋值给1
getValue() = 8; //返回引用 表示返回变量本身
cout << g_num << endl; //输出为8
}
int Max(int a, int b){//找最大值
return a > b ? a : b;
}
void printMax(int(*pMax)(int, int), int a, int b){
cout << pMax(1, 2) << endl;
}
struct Node{
int data;
};
void testAuto(){
auto a = 1;
//auto b; //报错,auto不能定义变量,要赋值
auto pMax = Max; //函数指针
cout << pMax(1, 2) << endl;//输出最大值2
auto ppMax = printMax;
//等效下面代码
void(*p)(int(*)(int, int), int, int) = printMax;
ppMax(pMax, 2, 3);
//decltype
struct Node pStruct = { 1 };
auto pS = &pStruct; //自动推断为struct Node*类型
auto pA = pStruct; //自动推断为struct Node类型
}
int main(){
//testBool();
//testQuote();
//useQuote();
testAuto();
while (1);
return 0;
}
?4.C++函数思想
#include<iostream>
using namespace std;
//内联函数:inline修饰的函数,短小精悍
inline int Max(int a, int b){
return a > b ? a : b;
}
void print(int a){
cout << a << endl;
}
//函数重载,允许 同名(print)不同参数 的函数存在
void print(int a, int b){ //数目不同
cout << a + b << endl;
}
void print(int a, char b){ //类型不同
cout << a + b << endl;
}
void print(char a, int b){ //顺序不同
cout << a + b << endl;
}
//函数缺省
void printData(int a = 1, int b = 2, int c = 3, int d = 4){
cout << a + b + c + d << endl;
}
int main(){
print(1, 'A'); //重载调用,优先调用类型一致的"int,char"
printData(); //默认调用初始化的值1+2+3+4
printData(10); //10+2+3+4
printData(10,20); //10+20+3+4
printData(10,20,30); //10+20+30+4
printData(10,20,30,40); //10+20+30+40
while (1);
return 0;
}
|