c++遇到的问题

先看下面的代码
在这里插入图片描述
首先报错的原因是,Gril的属性设置成私有了,你怎么可能在Boy里面直接访问到?
在java中通常的解决方法是写一个getName(),getAge()。这样你就可以访问到了啊。
c++中有友元函数,便巧妙的解决了数据共享。
加一句话就行了:夹在16~17行
friend void Boy::disp(Girl &);
这一行就是想说我允许了Boy的disp函数中可以直接操作Gril的成员。


形参由 类型+形参变量名组成。
加&符号表示引用。

void add1(int b) {
	b = 3;
}
void add2(int &b) {
	b = 3;
}
int main() {
	int a = 1;
	int c = 1;
	add1(a);//a没有被修改
	add2(c);//修改了
	cout << a << "   " << c << endl;
	
}

输出结果是 1 3.
因为一个是值传递,一个是地址传递。

反看开头的代码:
如果这么写:(把传进来的Girl类型的x做一下修改)

#include<iostream>
#include<string>
using namespace std;
class Girl;
class Boy
{
public:
	void disp(Girl &x);
};
class Girl
{
public:
	Girl(int age, string name) {
		this->age = age;
		this->name = name;
	}
	void showGril() {
		cout << age << name << endl;
	}
	friend void Boy::disp(Girl &x);
private:
	int age;
	string name;
};

void Boy::disp(Girl &x)
{
	cout << "girl's name is:" << x.name << ",age:" << x.age << endl;
	x.age = 18;
	x.name = "wanjun";
}

int main() {
	Boy b;
	Girl g(3, "万俊");
	g.showGril();
	b.disp(g);
	g.showGril();
}


可以看到两次showGril结果不一样了。
在这里插入图片描述
但是取地址符号去了呢?
在这里插入图片描述
关于&符号
有引用,还有取地址功能,详细请看
https://blog.csdn.net/qq_26501341/article/details/58192662

void disp(Girl &x);
这个x在函数声明中可以去掉为什么呢?
在这里插入图片描述

发布了29 篇原创文章 · 获赞 1 · 访问量 672

猜你喜欢

转载自blog.csdn.net/weixin_44414413/article/details/103827211
今日推荐