静态数据成员友元函数
静态数据成员
1. static成员必须在类外定义并初始化
2. static数据成员和函数成员可以通过对象
名引用也可以通过类名引用{Clock c1,c2;
c1.count;
Clock::count
3. static成员函数只能访问static数据成员,
不能访问非static成员
4. 普通成员函数可以访问static数据成员.
class Point {//类定义
public: //外部接口
Point(int x=0,int y=0):x(x),y(y){count++; //所有对象共同维护同一个count
}
Point(Point &p) { //复制构造函数
x = p.x;
y = p.y;
count++;
}
~Point() { count--; }
int getX() { return x; }
int getY() { return y; }
void showCount() { //输出静态数据成员
cout << " Object count = " << count << endl;
}
private: //私有数据成员
int x, y;
static int count;//静态数据成员声明,用于记录点的个数
};
int Point::count = 0;//必须定义和初始化
int main() { //主函数
Point a(4, 5); //定义对象a,其构造函数回使count增1
cout << "Point A: " << a.getX() << ", " << a.getY();
a.showCount(); //输出对象个数
Point b(a); //定义对象b,其构造函数回使count增1
cout << "Point B: " << b.getX() << ", " << b.getY();
b.showCount(); //输出对象个数
return 0;
}
静态成员函数
1.类外代码可以使用类名和作用域操作符来调用静态成员函数。
2.静态成员函数只能引用属于该类的静态数据成员或静态成员函数。
class Point {public:
Point(int x=0,int y=0):x(x),y(y){//所有对象共同维护同一个count
count++;
}
Point(Point &p) {x = p.x;
y = p.y;
count++;
}
~Point() { count--; }
int getX() { return x; }
int getY() { return y; }
static void showCount() {//静态函数成员cout<<count<<endl;}private: //私有数据成员
int x, y;
static int count; //静态数据成员声明
};
int Point::count = 0;//定义和初始化
int main() {Point a(4, 5); //构造函数使count增1
cout<<"Point A:"<<a.getX()<<","<<a.getY();
Point::showCount();//静态成员函数的调用
Point b(a); //构造函数使count增1
cout<<"Point B:"<<b.getX()<<","<<b.getY();
Point::showCount();
return 0;
}
友元函数
//一种破坏数据封装和数据隐藏的机制。
**不带有this指针
类中声明,类外或类内定义
不具有交换性
不具有传递性
不具有继承性
不是成员函数
#include <iostream>
#include <cmath>
class Point { //Point类声明
public: //外部接口
Point(int x=0,int y=0):x(x),y(y){ }
int getX() { return x; }
int getY() { return y; }
friend float dist(Point &a, Point &b);
private: //私有数据成员
int x, y;
};
float dist( Point& a, Point& b) {double x=a.x-b.x;
double y=a.y-b.y;
return sqrt(x*x+y*y);
}i
nt main() {Point p1(1,1), p2(4,5);
cout<<"The distance is:";
cout<<dist(p1,p2)<<endl;
return 0;
}
pta
1.对于以下关于友元的说法 (2分)
如果函数fun被声明为类A的友元函数,则该函数成为A的成员函数//不是成员函数
如果函数fun被声明为类A的友元函数,则该函数能访问A的保护成员,但不能访问私有成员
如果函数fun被声明为类A的友元函数,则fun的形参类型不能是A。
以上答案都不对
2.下面对静态数据成员的描述中,正确的是 (2分)
静态数据成员是类的所有对象共享的数据
类的每个对象都有自己的静态数据成员
类的不同对象有不同的静态数据成员
静态数据成员不能通过类的对象调用,只能通过“类名::标识符”调用
解析: 静态数据成员是被类的所有对象共享,它不属于类的任何一个对象,它的作用域是类范围。静态数据成员在每个类对象中并不占有存储空间,它只是每个类中分配有存储空间,供所有对象公用。静态数据成员的值对每个对象都一样,但它的值可以被任何一个对象更新,从而实现了同一类的不同对象之间的数据共享。
静态数据成员友元函数相关推荐
- C++类的静态数据成员和静态成员函数
目录 公有属性 静态数据成员 静态成员函数 公有属性 一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个对象的这个数据成员设定相同的值,如果改变类对象相 ...
- VS---不允许 dllimport 静态数据成员的定义
1.QT的Q_OBJECT包含静态数据定义: #define Q_OBJECT \ public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \st ...
- 不能定义声明dllimport_不允许 dllimport 静态数据成员
View Code "CTest::~CTest" : 不允许 dllimport 函数 的定义 "CTest::CTest" : 不允许 dllimport ...
- c语言类静态数据成员函数,鸡啄米:C++编程入门系列之二十一(C++程序设计必知:类的静态成员)...
鸡啄米在上一讲数据和函数中讲到,函数之间共享数据也就是此函数访问彼函数的数据主要是通过局部变量.全局变量.类的数据成员.类的静态成员及友元实现的,前三个已经讲过了,这一讲鸡啄米来讲讲静态成员.静态成员 ...
- C++静态数据成员和静态成员函数
在C++面向对象编程过程当中,对象与对象之间的数据不是共享,在设计类的时候,有时候需要一些对象之间共享的数据,除了把所要共享的数据设置为全局数据或者函数之外,还可以利用C++的静态机制. 1.静态数据 ...
- c++远征之模板篇——静态数据成员,静态成员函数
以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.静态数据成员 (1)不同于普通的数据成员,静态数据成员在没有实例化时,它也是存在的(即它是和类共存的): (2)它一般不依赖于构造函数的初始化 ...
- 静态数据成员与静态成员函数
3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握静态数据成员和静态成员函数的用法 要求设计一个点类 ...
- 3-6 静态数据成员与静态成员函数
3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 通过本题 ...
- C++学习(五) 静态数据成员和静态成员函数
文章目录 1.静态成员: 1.1.说明 1.2.格式 2.静态成员函数 2.1.说明 2.2.格式 1.静态成员: 1.1.说明 静态成员包括静态数据和静态成员函数. (1).静态数据成员的定义与普通 ...
最新文章
- 使用Dom4j操作XML数据
- 浅谈分布式消息技术 Kafka--大数据技术栈05
- 利用Delphi的File Of Type创建并管理属于你自己的数据库
- u3d无锯齿遮罩shader-可用于ugui
- DL之BP:利用乘法层/加法层(forward+backward)算法结合计算图(CG)求解反向求导应用题
- 静态分析android代码, 循环与trycatch
- Android开发之Android Material Design Toolbar自定义随笔
- 【One by One系列】IdentityServer4(四)授权码流程
- python_day7 绑定方法与非绑定方法
- NGINX + TOMCAT7 + MEMCACHED 实现SESSION 共享
- 中移M5310A NBIoT模组通信测试命令
- 美妆海报模板|来点创意的海报设计(立体剪纸风格)
- python lambda表达式及用法_Python中lambda表达式的常见用法
- vue打印指定的html,使用window.print()打印指定的一个vue 组件
- 网络安全等级保护细则
- 根据日期获取农历节日
- Excel方向键无法移动单元格/scrollLock解锁方法
- bzoj刷题(shui)记录
- 识别电路板上贴片电阻型号0805 0402 0603 1206封装信息
- 一个领域中的红海和蓝海