标准命名空间

命名空间的使用

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> using namespace std; // 命名空间必须定义在全局的作用域下
// 命名空间可以嵌套命名空间
// 如果命名空间冲突,则会自动的合并为一个命名空间 namespace zh {
int m_id = 10;
void Display(){ cout << "Display zh func" << endl; }
} namespace cn {
int m_id = 20; namespace cpp {
int m_id = 30;
}
} // 当写了无名空间,相当于写了 static int m_ptr;
// 静态变量只能在当前文件中使用
namespace{ int m_ptr = 10; } int main(int argc, char* argv[])
{
using namespace zh;
cout << zh::m_id << endl;
cout << cn::m_id << endl;
cout << cn::cpp::m_id << endl;
zh::Display(); system("pause");
return 0;
}

C++ 引用知识

引用的实质就是取别名,&写到左侧叫引用,写到右侧叫取地址。

普通的引用

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> using namespace std; int main(int argc, char* argv[])
{ int a = 10;
int &b = a; // 引用 cout << b << endl; system("pause");
return 0;
}

数组引用

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> using namespace std; int main(int argc, char* argv[])
{ int ary[10];
for (int x = 0; x < 10; x++)
ary[x] = x; // 给数组进行取别名
int(&parr)[10] = ary; // 用别名来输出
for (int y = 0; y < 10; y++)
{
cout << parr[y] << " " ;
} // 第二种方式取别名
typedef int(ARYS)[10]; // 一个具有10个元素的数组 ARYS &pary2 = ary;
for (int y = 0; y < 10; y++)
{
cout << pary2[y] << " ";
} system("pause");
return 0;
}

参数传递方式 参数传递两种方式,传递数值,传递地址,还可以传递引用

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> using namespace std; // 指针传递
void mySwap(int *a, int *b)
{
int tmp = *a; *a = *b;
*b = tmp;
cout << *a << *b << endl;
} // 引用传递
void myswap2(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
} int main(int argc, char* argv[])
{
int x = 10;
int y = 20; myswap2(x,y); cout << x << endl; system("pause");
return 0;
}

引用传递注意事项 int a = 10; 改成static 即可实现不销毁。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> using namespace std; int& dowork()
{
int a = 10; // 局部变量,返回前销毁了,引用就不存在了
return a;
} int main(int argc, char* argv[])
{
int &ret = dowork(); // 编译器做了优化,如果打印多次就会出现乱码 cout << ret << endl; // 10
cout << ret << endl; // 乱码了
cout << ret << endl;
cout << ret << endl;
cout << ret << endl; // 引用可以作为左值使用
dowork() = 1000; // 相当于写了 a = 1000; system("pause");
return 0;
}

引用的本质: 引用所占用的内存地址与指针类似,引用本质就是指针常量

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> using namespace std; void test(int& ref)
{
ref = 1000;
} int main(int argc, char* argv[])
{ int a = 10;
int& aref = a; // 指针常量必须初始化,内部是一个指针常量 aref = 20; // 地址不可改 cout << a << endl; // 自动转为 *aref = 20; cout << aref << endl; system("pause");
return 0;
}

引用使用场景:指针的引用

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h> using namespace std; struct person
{
int m_age; }; // 分配空间函数
// **p = > 具体的 person 对象
// *p => 对象的指针
// p => 指针的指针
void allocat(person **p)
{
*p = (person *) malloc(sizeof(person));
(*p)->m_age = 100; }
// 普通开辟空间写法
void test()
{
struct person *p = NULL;
allocat(&p); // 开始分配内存
cout << "p的:" << p->m_age << endl;
} // ------------------------------------------------
// 利用指针引用开辟空间
void allocatbyref(person* &p)
{
p = (person *)malloc(sizeof(person));
p->m_age = 1000;
}
void test2()
{
person *p = NULL;
allocatbyref(p);
cout << (*p).m_age << endl;
} int main(int argc, char* argv[])
{ test2();
system("pause");
return 0;
}

常量引用:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h> using namespace std; void test()
{
const int &ref = 10; // 加入const后,编译器会处理,创建了一个临时变量,int tmp = 10; const int &ref = tmp;
// ref = 10; 无法直接修改 // 换种方式修改它
int *p = (int*)&ref;
*p = 1000;
cout << ref << endl;
} int main(int argc, char* argv[])
{
test();
system("pause");
return 0;
}

常量引用使用场景: 用来修饰型can

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h> using namespace std; void test(const int &val) // 不让你修改下
{ cout << val << endl;
} int main(int argc, char* argv[])
{
int a = 10; test(a);
system("pause");
return 0;
}

函数与类的一些知识点

内联函数,为了替换c中的宏,内联函数本身也是函数,只是加了一个关键字inline()

编译器会如何除了? 直接变成了宏,直接内嵌到调用的位置,并不增加新的函数。

在类中定义的,成员函数,默认会自动加上内联函数关键字声明,这是编译器为我们加上的。

但是,如果函数过大,或使用了循环等结构,则类则不会声明为内联函数。

#include <iostream>
#include <string> using namespace std; inline void compare(int x, int y)
{
int ret = x < y ? x : y;
cout << ret << endl;
} int main(int argc, char *argv[])
{
compare(10, 20);
system("pause");
return 0;
}

函数的默认参数

#include <iostream>
#include <string> using namespace std; void func(int x = 10, int y = 20)
{
cout <<x+y << endl;
} int main(int argc, char *argv[])
{
func(1, 20);
system("pause");
return 0;
}

函数重载: 名称相同,但是符号不同,后面的参数不同,就是重载。

当使用重载时,编译器会偷偷在前面加上 _func 关键字,这样来使用重载,通过编译检查。

using namespace std;

void func(int x)
{
cout <<x << endl;
} void func(double x)
{
cout << x << endl;
} int main(int argc, char *argv[])
{
func(1);
func(1.1);
system("pause");
return 0;
}

extern c 的作用: 在c++ 中想要使用C代码,需要加上extern 关键字。

#include <iostream>
#include <string> using namespace std; extern "C" void show()
{
printf("aaaaa \n");
} int main(int argc, char *argv[])
{
show();
system("pause");
return 0;
}

类的基本定义

#include <iostream>
#include <string> using namespace std; class Student
{
public:
int uid;
char *name;
int age; public:
void set(int id,char *name,int age)
{
this->uid = id;
this->name = name;
this->age = age;
}
void display()
{
cout << this->uid << this->name << this->age << endl;
}
}; int main(int argc, char *argv[])
{
Student stu; // 实例化 stu.set(1001, "lyshark", 23); // 设置数据
cout << stu.uid << stu.name << stu.age << endl; // 输出
stu.display(); // 使用成员函数输出 Student *ptr = &stu; // 使用指针
cout << ptr->uid << ptr->name << ptr->age << endl; system("pause");
return 0;
}

C语言实现的类: 这个是不是看起来很麻烦了,我们继续改进。

#include <iostream>
#include <string> using namespace std; struct Student
{
char name[64];
int age;
}; void PrintPerson(struct Student *ptr)
{
printf("Name: %s --> Age: %d \n", ptr->name, ptr->age);
} int main(int argc, char *argv[])
{
struct Student stu; strcpy(stu.name, "lyshark");
stu.age = 23;
PrintPerson(&stu); system("pause");
return 0;
}

C/C++ 命名空间引用知识的更多相关文章

  1. 命名空间引用问题 包括找不到ConfigurationManager 这个类

        因为SqlConnection类是属于 System.Data.SqlClient命名空间下的,     所以命名空间引用的时候需要加上 System.Data.SqlClient,代码如下: ...

  2. MVC layout 命名空间引用问题

    虽然用MVC做了很多项目,但是都是在别人搭好的框架上实现 今天碰到一个很简单的命名空间引用问题 如图所示,Scripts和Styles 都没有引用命名空间 解决方法一: 直接使用 System.Web ...

  3. using Sysyem.Net.Http命名空间引用不了的解决方案

    1.查看.Net Framework的框架是否是在4.5之上,如果不是要下载4.5之上的目标框架. 2.在引用器里面添加using System.Net.Http命名空间 选择项目列表中的“引用”-- ...

  4. C++基础 (1) 第一天 C++相对C的改进 命名空间 引用

    第一天 语法 STL 数据结构  设计模式… 2 C++语言的间接 C++ = C语言+面向对象 本贾尼 语言分类: 不关心效率 只关心架构:java/脚本语言 效率:(内存要自己管理了,操作指针)C ...

  5. java引用知识

    最近从新拜读<深入理解Java虚拟机:JVM高级特性与最佳实践>这本书,看到有关引用的相关知识,以前没有好的习惯,这次看完在博客上记录下 引用:如果reference类型中的数据存储的数值 ...

  6. C#自定义的命名空间引用

    项目右键引用 ,添加要引用的 然后在代码用 using 绰用

  7. C++基础 (2) 第二天 C++相对C的改进 命名空间 引用

    1 昨日回顾 2内联函数 3 默认参数和占位参数 4函数重载 函数重载 就是可以定义多个相同名字的函数 6 类和对象的基本语法 7 类的封装和访问控制 还有一个结论: 封装有两层含义: 把属性和方法进 ...

  8. C# 基础知识系列- 17 实战篇 编写一个小工具(1)

    0. 前言 这是对C# 基础系列的一个总结,现在我们利用之前学到的知识做一个小小的工具来给我们使用. 如果有看过IO篇的小伙伴,应该有印象.当时我提过一个场景描述,我们在平时使用系统的时候,经常会为了 ...

  9. python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)

    python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...

  10. python模块引用梳理

    文件组织结构: t ├── __init__.py ├── main.py ├── t1 │   ├── A.py │   └── __init__.py └── t2 ├── B.py └── __ ...

随机推荐

  1. ajax补充说明 多对多三种创建方式 django内置序列化组件 ORM批量操作数据 分页器 form组件入门

    目录 ajax补充说明 request.is_ajax() ajax回调函数接收返回值 ajax回调函数 接受json数据 第一种方式:后端使用json模块 第二种方式:后端返回JsonRespons ...

  2. Deltix Round, Summer 2021 Div1 + Div2 A~E

    比赛链接:Here 1556A. A Variety of Operations 注意到2, 3操作不改变总和,1操作使得总和加上了一个偶数,故直接判断总和是否为偶数即可.如果和为偶数,只要判断c和d ...

  3. 第四届蓝桥杯(2013)C/C++大学A组省赛题解

    第一题:高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生 ...

  4. 当 Rokid 遇上函数计算

    作者:王彬(阿里云解决方案架构师).姚兰天(Rokid 技术专家).聂大鹏(阿里云高级技术专家) 公司背景和业务 Rokid 创立于2014年,是一家专注于人机交互技术的产品平台公司.Rokid 通过 ...

  5. SAE 联合乘云至达与谱尼测试携手共同抗疫

    作者 | 营火.计缘.张祖旺 前言 当前疫情形势依然严峻,各行各业众志成城,携手抗疫.新冠病毒核酸检测筛查是疫情防控的重要一环,如何应对疫情的不断反复,以及每日数以万计的核酸检测结果成为每个检测公司的 ...

  6. 国内服务器 3 分钟将 ChatGPT 接入微信公众号(超详细)

    原文链接:https://forum.laf.run/d/364 最近很火的ChatGPT可以说已经满大街可见了,到处都有各种各样的体验地址,有收费的也有免费的,总之是五花八门.花里胡哨. 所以呢,最 ...

  7. sublime_text4 2023最新版 激活教程

    官网 Sublime HQ - Remarkable Software 东西在教学的时候还是挺好用的,就是要付费购买,穷,没钱 买不起,自己动手丰衣足食. 下载安装包 我现在最新版是4.4152 下面 ...

  8. 每天学五分钟 Liunx 100 | 存储篇:磁盘分区

    这一节主要介绍 Liunx 是怎么用磁盘的. 磁盘分区 在 Liunx 中一切皆文件,磁盘在 Liunx 中也是文件,包括 /dev/hd[a-d](以 IDE 为接口) 和 /dev/sd[a-p] ...

  9. Canal使用和安装总结

    转载请注明出处: 1.定义 Canal 组件是一个基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费,支持将增量数据投递到下游消费者(如 Kafka.RocketMQ 等)或者存储(如 El ...

  10. python中BeautifulSoup库使用小结

    转载请注明出处: BeautifulSoup是一个用于解析HTML和XML文档的Python库,它提供了一些简单但强大的API,让你可以从文档中提取数据.以下是一些BeautifulSoup的主要特性 ...