- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7讲 C++程序结构
2
本讲主要内容
友元
编译预处理命令
多文件结构和工程
深度探索
指针与引用
3
友元
友元是C++提供的一种破坏数据封装和数据隐藏的机制。
通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。
为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元。
友 元
4
友元函数
友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员
作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。
访问对象中的成员必须通过对象名。
友 元
5
例5-6 使用友元函数计算两点距离
#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 static_castfloat(sqrt(x * x + y * y));
}
int main() {
Point p1(1, 1), p2(4, 5);
cout The distance is: ;
cout dist(p1, p2) endl;
return 0;
}
36
7
友元类
若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员。
声明语法:将友元类名在另一个类中使用friend修饰说明。
友 元
8
友元类举例
class A {
friend class B;
public:
void display() {
cout x endl;
}
private:
int x;
}
class B {
public:
void set(int i);
void display();
private:
A a;
};
友 元
void B::set(int i) {
a.x=i;
}
void B::display() {
a.display();
}
39
10
友元关系是单向的
如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有、保护数据。
11
常类型
常类型的对象必须进行初始化,而且不能被更新。
常对象:必须进行初始化,不能被更新。
const 类名 对象名
常引用:被引用的对象不能被更新。
const 类型说明符 引用名
常数组:数组元素不能被更新。
类型说明符 const 数组名[大小]...
常指针:不能通过指针改变对象值,指针本身可以改变。
共享数据的保护
12
常对象举例
class A
{
public:
A(int i,int j) {x=i; y=j;}
...
private:
int x,y;
};
A const a(3,4); //a是常对象,不能被更新
共享数据的保护
13
用const修饰的对象成员
常成员函数
使用const关键字说明的函数。
常成员函数不更新对象的数据成员。
常成员函数说明格式:类型说明符 函数名(参数表)const;这里,const是函数类型的一个组成部分,因此在实现部分也要带const关键字。
const关键字可以被用于参与对重载函数的区分
通过常对象只能调用它的常成员函数。
常数据成员
使用const说明的数据成员。
共享数据的保护
14
例5-7 常成员函数举例
#includeiostream
using namespace std;
class R {
public:
R(int r1, int r2) : r1(r1), r2(r2) { }
void print();
void print() const;
private:
int r1, r2;
};
共享数据的保护
void R::print() {
cout r1
文档评论(0)