c++关于类成员函数中 参数列表中参数访问自身的私有变量

本人的第四篇CSDN文章,有错误一定要指出啊啊啊啊啊啊啊啊啊啊

C++关于类的成员函数中,参数列表中访问参数的自身的私有变量


在做作业时候,在写类函数的时候遇到了问题。
当参数列表为本类的参数时候,可以直接访问参数的私有变量,于是自己探究了下用法和访问范围。

//test.h
#pragma once
#include<iostream>
class test {
private:
	int _num;
public:
	test(int num=10):_num(num) {
		
		std::cout << "this is constructer "<<_num<<'\n';
	}

	int myint(const test&a) {
		return _num + a._num;
	}

	friend int operator+(const test& a, const test& b) {
		return a._num + b._num;
	}
	void mytest() {
		test b;
		std::cout << b._num<<'\n';
	}
};

//test_compare.h
#pragma once
#include<iostream>
#include"test.h"
template<typename T>
class test_compare {
private:
	int _num;
public:
	test_compare(int num = 10) :_num(num) {

		std::cout << "this is constructer " << _num << '\n';
	}

	int myint(const test_compare<T>& a) {
		return _num + a._num;
	}

	friend int operator+(const test_compare<T>& a, const test_compare<T>& b) {
		return a._num + b._num;
	}
	void mytest() {
		test_compare<int> b;
		std::cout << b._num << '\n';
	}
	void interaction(test a) {
		std::cout << a._num;
	}
};
//main.cpp
#include<iostream>
#include"test.h"
#include"test_compare.h"
int main() {
	test a;
	test b(20);
	std::cout<<a.myint(b)<<std::endl;
	std::cout << a + b << std::endl;
	a.mytest();
	std::cout << std::endl;
	test_compare<int> a1;
	test_compare<int> b1(20);
	std::cout << a1.myint(b1) << std::endl;
	std::cout << a1 + b1 << std::endl;
	a1.mytest();
	a1.interaction(a);
}

大家可以看下这个代码会不会有问题。

报错图片

所以我们可以看见错误是出现在test_compare中调用了test的私有变量。

但是大家有没有看见其他的都是没有错误的,就是相当于不论是普通类还是模板类,如果是本类参数都可以调用参数的私有函数。说实话这点我还是有点不理解的,如果有大神能告诉我为什么吗。

把a1.interaction(a);注释掉以后,运行截图。
在这里插入图片描述
所以得出结论:如果是本类中函数参数列表是自己类的参数,可以调用参数的私有变量!

大家加油!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值