电压检测电路的电阻选择

img


对于电压检测电路中的电阻,怎么选择电阻的阻值哇?工作原理是怎么样的?

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7770981
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
  • 除此之外, 这篇博客: 关于等号运算符重载的解读中的 重载等号的返回类型是什么? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 对于这一个问题,我们要思考一下,重载=到底意味着什么。下图代码中我首先是定义了一个void返回值的重载函数,运行代码,结果很正常,void应该是可以的。事实真的如此吗?
    这里表面是重载赋值运算符,其实和setter方法没什么两样。我们需要考虑的是没有返回值类型就意味着,我们不能连续调用,即形如t3 = t2 = t1是会出错的,我们作为程序的开发者,我们当然可以避免这种操作,但是既然是面向对象,那么我们就要避免这种行为,提高程序的鲁棒性。
    重新回到t3 = t2 = t1这里,注意=是右结合,即t3 = (t2 = t1)。为了实现"连锁赋值",赋值运算符必须返回一个指向操作符的左侧实参的引用。当然了返回Test值貌似也是可以的,但是我们需要注意会有额外的开销,包括匿名对象的拷贝构造函数和析构函数,当我们没有提供显式的拷贝构造函数时,匿名对象赋值给一个实例可能会出错,错误的原因就在于默认的拷贝构造函数是将类中的值完全的复制,当涉及到指针的时候,由于仅仅是浅拷贝,会在匿名对象被析构之后,指针会变成空悬指针。

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    class TestA {
    public:
    	TestA() { m_a = 0; m_b = 0; }
    	TestA(int a, int b) { m_a = a; m_b = b; }
    	/*void operator=(const TestA& tt) {
    		this->m_a = tt.m_a;
    		this->m_b = tt.m_b;
    	}*/
    
    	TestA& operator=(const TestA& tt) {
    		this->m_a = tt.m_a;
    		this->m_b = tt.m_b;
    		return *this;
    	}
    	void printA() { cout << m_a << " " << m_b << endl; }
    private:
    	int m_a;
    	int m_b;
    };
    
    int main() {
    	TestA t1(3, 4);
    	TestA t2(4, 5);
        TestA t3;
    	t3 = t2 = t1;
    
    	t2.printA();
        t3.printA();
    	return 0;
    }
    
    

    输出如下,调用返回值为引用的赋值运算符重载函数,结果是符合预期的。

    3 4
    3 4 
    
  • 您还可以看一下 张传波老师的软件设计是怎样炼成的?课程中的 整个程序需要考虑的设计规范小节, 巩固相关知识点