标签:友元 函数 对象 age per 夯实 笔记 成员 指针
/*
date:20211102
对象的特性
成员变量和成员函数分开存储
c++会为每个空对象也分配一个字节空间,是为了区分空对象占内存的位置
this指针
本质上是 指针常量 ,指针的指向是不可以修改的
per * const this;
this指向被调用的成员函数所属的对象
解决对象冲突
返回对象本身 *this
空指针访问成员函数
不能访问成员属性,属性前默认有个this指针
const修饰成员函数
常函数
常函数不能修改成员属性(除非成员属性前修饰 mutable)
在后面修饰 const ,不可以修改指针指向的 值,也不可以修改指针的 指向
常对象
常对象只能调用常函数
------------------------------------------------------
友元
关键字 friend
全局函数做友元
类做友元
成员函数做友元
*/
#include<iostream>
#include<string>
using namespace std;
class per {
public:
//this指向被调用的成员函数所属的对象
per() {
}
per(int age) {
this->age = age;
}
//思考加引用& 和不加引用的区别
per &ageAdd(per& p) {
this->age += p.age;
return *this;
}
void showAge() {
if (this == NULL)//防止空指针
return;
cout << "age : " << age << endl;
}
//this 本质上是 指针常量 ,指针的 指向 是不可以修改的 per * const this;
// const per * this; 不能修改指针指向的 值
void fun() const//在后面修饰 const ,不可以修改指针指向的 值,也不可以修改指针的 指向
{
//age = 10;//无法修改
//this = NULL;//不可以修改指针的指向
age2 = 10;
}
int age;
mutable int age2;
};
void test() {
per p(18);
cout << p.age << endl;
}
void test02() {
per p1(10);
per p2(10);
p2.ageAdd(p1);
cout << "p2 :" << p2.age << endl;
//链式编程思想
p2.ageAdd(p1).ageAdd(p1).ageAdd(p1);
cout << "p2 :" << p2.age << endl;
}
void test03() {
//常对象只能调用常函数
const per p;
p.age;
p.fun();
}
//友元-----------------------------------------------
class build {
//全局函数做友元
friend void gf(build& bui);
public:
build() {
a = "客厅";
b = "卧室";
}
string a;
private:
string b;
};
//全局函数 做友元
void gf(build& bui) {
cout << "good friend 正在访问 : " << bui.a << endl;
cout << "good friend 正在访问 : " << bui.b << endl;
}
void test04() {
build b;
gf(b);
}
int main() {
//test();
//test02();
test04();
system("pause");
return 0;
}
标签:友元,函数,对象,age,per,夯实,笔记,成员,指针 来源: https://blog.csdn.net/qq_43721935/article/details/121104229
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。