博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++基础①命名空间结构体和引用
阅读量:5972 次
发布时间:2019-06-19

本文共 3348 字,大约阅读时间需要 11 分钟。

hot3.png

接续

前言

在进行NDK开发的时候 , 我们使用的很多第三方库 , 大多数都是使用的C/C++编写的 , 有些可能是C和C++混编的 。如,我在NDK系列中提到的使用的两个库 bsdiffbzip2 。那么 , 我们在学完C语言之后 , 有必要研究一下C++,因为C++是C的拓展 , 加入了面向对象和模板技术 ,那么基本语法就不用介绍了。本系列假定你具有一定的编程经验,对面向对象有一定的了解 。

命名空间

在Java中 , 我们使用包来区分文件的所在路径和类来自哪个包 ,使用package来声明文件在哪个文件目录下 , 进而在使用的时候可以区分 , 来自不同的包的相同类名 。在C++里面没有package关键字 , 而是使用namespace来作为区分 , 在PHP中也是如此 , 在PHP5.0的时候引入的了namespace来做为区分不同路径下的同名函数和类 。

定义namespace

/*	cpp namespace demo*/#include 
/* 自定义命名空间 , 相当于Java中的包 。 命名空间可以嵌套*/namespace NSP_A{ class A { public: void sayHello() { std::cout << "say Hello " << std::endl; } }; // 嵌套namespace namespace NSP_A_1 { class A { public: void sayHello() { std::cout << "Say Hello 1" << std::endl; } }; }}

使用namespace

// 标准命名空间 (包含很多标准的定义)using namespace std;// use namespaceusing namespace NSP_A;/*	使用自定义命名空间*/void useNameSpace() {	A a; 	a.sayHello();	// 嵌套命名空间使用	NSP_A_1::A a2;	a2.sayHello();}

在C++中也定义了一些标准命名空间 , 如std ,C++中也兼容C语言语法 , 可以引入C语言头文件,使用C标准函数 。

C++ 类 与 结构体

C++是面向对象语言 , 面向对象语言的一大特征就是可以将类型整合起来 , 可以创建类型实例 。

创建C++类

/*	cpp class type*/#include 
using namespace std;namespace CPP_CLASS{ class Animal { // C++ 共用权限访问修饰符 private: char* name; int age; public: void setName(char* name) { this->name = name; } void setAge(int age) { this->age = age; } void showInfo() { cout << "名称:" << this->name << " 年岁:" << this->age << endl; } };}

写法都是类似的 , C++字段和函数都是采用的共享权限修饰符 , 值得注意的是 , 在C++中 , 结构体里面的属性和函数也具有权限访问修饰符 。

/*	CPP Struct*/namespace CPP_STRUCT{	// C++结构体与C结构不同之处在于 , 在C++中结构体内字段函数可以有权限修饰符,用法和类用法一致	// 和类不同的是 , struct 不能继承	struct Person	{	private:		char* name;		int age;	public:		void setName(char* name) {			this->name = name;		}		void setAge(int age) {			this->age = age;		}		void showPersonInfo() {			cout << "姓名: " << this->name << "  年龄: " << this->age << endl;		}	};}

结构体和类最大的不同是 , 结构体不能继承 , 不能进行抽象化。

使用C++类 与 结构体

/* CPP Class */using namespace CPP_CLASS;/* CPP Struct */using namespace CPP_STRUCT;/*	Simple CPP Class*/void useCppClass() {	Animal animal;	animal.setName("dog");	animal.setAge(2);	animal.showInfo();}/*	C and C++ 结构体的区别*/void useCppStruct() {	Person p;	p.setName("zeno");	p.setAge(20);	p.showPersonInfo();}

在C++中 , 使用类与使用结构体 , 用法并无二致 , 只是结构不能使用new而类可以使用 , new出来的是一个对象指针 。

引用

相信大家对引用并不陌生 , 在Java中 , 我们常常将对象变量叫做对象引用 , 在C++中也不例外 , C++中的引用也可以作为对象变量 , 但C++中的引用不会开辟新的空间 , 去存储指向对象内存空间的地址值 , 而是作为对象引用的一个别名 。

简单示意图

引用

引用示例

/*	CPP 引用 */#include 
namespace CPP_QUOTE { class Quote { public: int x = 10; // 引用 ,就是传入变量的别名,引用不会开辟新的内存空间,如同指针一样,指向的是传入变量的内存空间 // 一般作为函数参数或返回值 // 引用使用方便 void swip(int &a, int &b) { int c = 0; c = a; a = b; b = c; } // 指针交换 void swip_p(int* a , int* b) { int c = 0; c = *a; *a = *b; *b = c; } };}

引用在函数传值的时候, 可以当指针来使用 , 引用最广泛的用途就在于 , 在函数参数中 , 充当指针用 。

引用使用

/* C++ 引用的使用 *//* CPP Quote */using namespace CPP_QUOTE;void useCppQuote() {	Quote q;	// Quote q 的别名	Quote &q1 = q;	q1.x = 100;	printf("q的内存地址 : %#x , q1的内存地址:%#x\n", &q, &q1);	cout << " q == " << q.x << endl;	int x = 20, y = 40;	q1.swip(x, y);	cout << " q swipe  x = " << x << "  y = " << y << endl;	// 指针值交换	q1.swip_p(&x, &y);	cout << " 指针值交换 :   x = " << x << "  y = " << y << endl;}

打印对象的地址与引用变量的地址 , 我们会发现内存地址是一致 , 因为引用是变量的别名 , 不会创建新的内存空间。

结语

有了C语言基础 , 学C++ , 只要掌握语法的差异性和一些C++的特性 , C++还是很容易上手的 , 基础语法 , 需要动手练 , 多做实验 , 慢慢就会熟能生巧 。

转载于:https://my.oschina.net/byxiaozhu/blog/750042

你可能感兴趣的文章
安装和配置Tomcat
查看>>
实验三
查看>>
第一次实验总结
查看>>
openssh for windows
查看>>
PostgreSQL cheatSheet
查看>>
vue ...mapMutations 的第一个参数默认为 数据对象state
查看>>
js escape,unescape解决中文乱码问题的方法
查看>>
bzoj2073
查看>>
sed进阶教程
查看>>
go不使用工具包将大写字符转成小写字符的方法
查看>>
初始angular框架(1)
查看>>
计算进程出现次数
查看>>
(2)shiro角色资源权限
查看>>
Linux下挂载存储设备
查看>>
java 学习写架构必会几大技术点
查看>>
poj 2513 欧拉回路+并查集推断是否联通+Trie树
查看>>
vue2 如何操作dom
查看>>
木棒与三角形问题小结
查看>>
使用java源代码生成Kettle 4.4
查看>>
iOS学习必须了解的七大手势
查看>>