06_c++静态成员和友元
来源:互联网 发布:用c语言控制九九乘法表 编辑:程序博客网 时间:2024/06/09 20:12
静态成员和友元
1、static成员
1.1、static数据成员
a,static数据成员的声明
static在类中进行声明,注意:此时并没有给该static数据成员分配空间,只是做了一个声明。
class Person {private: static int cnt; /* 只是进行了声明,并没有分配空间 */...}
b,static数据成员的定义和初始化
在函数中使用格式 : <类名>::<静态数据成员名> 对static数据成员进行定义和初始化,注意定义的时候不加static。
int Person::cnt = 0;/* 定义和初始化,为类中的数据成员cnt分配空间,不加static */
c,含static成员的类大小
class Person { public: int id; static int cnt; }; int main() { cout << sizeof(Person) << endl; return 0; }
输出结果为:4.
为什么不是8?因为类中的static成员变量是放在全局数据存储区的,其不与普通类成员变量放在一块。
1.2、static成员函数
由于类的static成员和类的对象无关,则static成员函数不含this指针,即静态成员函数不能访问非静态(包括成员函数和数据成员),但是非静态可以访问静态。因为静态是属于类的,它是不知道你创建了10个还是100个对象,所以它对你对象的函数或者数据是一无所知的,所以它没办法调用。
#include <iostream>#include <string.h>#include <unistd.h>using namespace std;class Person {private: static int cnt;public: static int getCount(void); Person() { cnt++; }};int Person::cnt = 0; /* 定义和初始化,为类中的数据成员cnt分配空间,不加static */int Person::getCount(void) { return cnt; }int main(int argc, char **argv){ Person p[100]; cout << "person number = "<<Person::getCount()<<endl;/* Person::getCount()类直接调用静态成员函数。 */ cout << "person number = "<<p[0].getCount()<<endl; cout << "person number = "<<p[1].getCount()<<endl; return 0;}
2、友元函数
2.1、友元函数作用
在实现类之间数据共享时,减少系统开销,提高效率。友元函数是可以直接访问类的私有成员的非成员函数
2.2、友元函数使用
在类外实现函数,它不属于任何类,在类中加上关键字 friend 进行声明。
#include <iostream>#include <string.h>#include <unistd.h>using namespace std;class Point{private: int x; int y;public: Point() {} Point(int x, int y) : x(x),y(y){} int getX(){ return x; } int getY(){ return y; } void setX(int x){ this->x = x; } void setY(int y){ this->y = y; } void printInfo() { cout<<"("<<x<<", "<<y<<")"<<endl; } friend Point add(Point &p1, Point &p2);/* 声明友元函数 */};Point add(Point &p1, Point &p2)/* 实现函数 */{ Point n; n.x = p1.x + p2.x;/* x,y属于类的私有成员,友元函数可以访问 */ n.y = p1.y + p2.y; return n;}int main(int argc, char **argv){ Point p1(1, 2); Point p2(2, 3); Point sum = add(p1, p2); sum.printInfo(); return 0;}
阅读全文
0 0
- 06_c++静态成员和友元
- C++之静态成员和友元
- C++之静态成员和友元
- 静态成员函数和友元
- 静态成员与友元
- 静态成员,友元,模板
- C++ 的友元和静态成员 小解
- 浅谈类的静态成员和友元
- 第2.5节:静态成员和友元函数(C++)
- 友元 函数/类 ;静态成员 及 静态成员函数
- C++类的静态成员,友元和常成员常对象
- 类的常成员、静态成员和友元学习笔记
- C++静态成员与友元
- 静态成员与友元函数
- 类中静态成员与友元
- this指针 静态成员 友元
- 【C++】友元与静态成员
- C++友元关系和类的静态成员概念和使用
- 北京市谷歌地球高程DEM等高线下载
- java自定义注解以及原理
- androidstudio 引用外部工程
- java串口通信
- 安卓开发中非常炫的效果集合
- 06_c++静态成员和友元
- Linux Netlink基本使用
- 以菱形链接(diamond link)为例,探讨Linux下连接器和加载器对Shared libarary兼容性的处理
- !@#$赛车pk10大小单双走势技巧之八码滚雪球走势技巧教学@#$1
- ionic3 grid网格基础使用
- python 插入数据库错误的字符编码问题
- 在Lua中继承Cocos2dx的C++类
- Xms Xmx PermSize MaxPermSize 区别
- Java中的访问权限详解