support bazel complie this project and format code.
This commit is contained in:
13
practical_exercises/10_day_practice/day4/friend/BUILD
Normal file
13
practical_exercises/10_day_practice/day4/friend/BUILD
Normal file
@@ -0,0 +1,13 @@
|
||||
# please run `bazel run //practical_exercises/10_day_practice/day4/friend:class`
|
||||
# please run `bazel run //practical_exercises/10_day_practice/day4/friend:func`
|
||||
|
||||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
|
||||
cc_binary(
|
||||
name = "class",
|
||||
srcs = ["class.cpp"],
|
||||
)
|
||||
cc_binary(
|
||||
name = "func",
|
||||
srcs = ["func.cpp"],
|
||||
)
|
43
practical_exercises/10_day_practice/day4/friend/class.cpp
Normal file
43
practical_exercises/10_day_practice/day4/friend/class.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
/*
|
||||
若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员。
|
||||
声明语法:将友元类名在另一个类中使用friend修饰说明。
|
||||
*/
|
||||
|
||||
/*
|
||||
如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,
|
||||
但A类的成员函数却不能访问B类的私有、保护数据。
|
||||
*/
|
||||
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(); }
|
||||
|
||||
int main(int argc, char const *argv[]) {
|
||||
B b;
|
||||
b.Set(10);
|
||||
b.Display();
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有、保护数据
|
||||
*/
|
27
practical_exercises/10_day_practice/day4/friend/func.cpp
Normal file
27
practical_exercises/10_day_practice/day4/friend/func.cpp
Normal file
@@ -0,0 +1,27 @@
|
||||
//使用友元函数计算两点间距离
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
class Point {
|
||||
public:
|
||||
Point(int x = 0, int y = 0) : X(x), Y(y) {}
|
||||
int GetX() { return X; }
|
||||
int GetY() { return Y; }
|
||||
friend float Distance(Point &a, Point &b);
|
||||
|
||||
private:
|
||||
int X, Y; //私有数据成员
|
||||
};
|
||||
//通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。
|
||||
float Distance(Point &a, Point &b) {
|
||||
double dx = a.X - b.X;
|
||||
double dy = a.Y - b.Y;
|
||||
return sqrt(dx * dx + dy * dy);
|
||||
}
|
||||
|
||||
int main() {
|
||||
Point p1(3.0, 5.0), p2(4.0, 6.0);
|
||||
cout << "两点距离为:" << Distance(p1, p2) << endl;
|
||||
|
||||
return 0;
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
# <20><>Ԫ<EFBFBD><D4AA><EFBFBD>
|
||||
<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>C++<2B>ṩ<EFBFBD><E1B9A9>һ<EFBFBD><D2BB><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD>ݷ<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĻ<D8B5><C4BB>ơ<EFBFBD>
|
||||
ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ࡣ
|
||||
Ϊ<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD>龡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
|
||||
# <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
|
||||
<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹؼ<EFBFBD><EFBFBD><EFBFBD>friend<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>ķdz<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> private <20><> protected<65><64>Ա
|
||||
<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>װ<EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>еij<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Reference in New Issue
Block a user