本人的第四篇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);
}
大家可以看下这个代码会不会有问题。
![报错图片](https://img-blog.csdnimg.cn/20200518212419331.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk2MTc4MA==,size_16,color_FFFFFF,t_70)
所以我们可以看见错误是出现在test_compare中调用了test的私有变量。
但是大家有没有看见其他的都是没有错误的,就是相当于不论是普通类还是模板类,如果是本类参数都可以调用参数的私有函数。说实话这点我还是有点不理解的,如果有大神能告诉我为什么吗。
把a1.interaction(a);注释掉以后,运行截图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200518212729681.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk2MTc4MA==,size_16,color_FFFFFF,t_70)
所以得出结论:如果是本类中函数参数列表是自己类的参数,可以调用参数的私有变量!
大家加油!!!