include "IOSTREAM"
using namespace std;
class Complex{
friend ostream& operator << (ostream& out, const Complex& c);
friend Complex operator- (const Complex& c1, const Complex& c2);
//friend Complex operator* (const Complex& c1, const Complex& c2);
//friend Complex operator/ (const Complex& c1, const Complex& c2);
public:
Complex (double re = 0.0,double im = 0.0);
Complex& operator+=(const Complex& c);
Complex& operator-=(const Complex& c);
Complex operator+(const Complex&c2);
private:
double m_re,m_Im;
};
Complex& Complex::operator+=(const Complex& c)
{
m_re += c.m_re;
m_Im += c.m_Im;
return *this;
}
Complex::Complex(double re, double im)
{
m_re = re;
m_Im = im;
}
Complex Complex::operator+(const Complex& c2)
{
return Complex(m_re + c2.m_re, m_Im + c2.m_Im);
}
Complex& Complex::operator-=(const Complex& c)
{
m_re -= c.m_re;
m_Im -= c.m_Im;
return *this;
}
ostream& operator << (ostream& out, const Complex& c)
{
out << "(" << c.m_re << "," << c.m_Im << ")";
return out;
}
Complex operator-(const Complex& c1, const Complex& c2)
{
return Complex(c1.m_re -c2.m_re,c1.m_Im - c2.m_Im);
}
int main()
{
/**/
Complex c1 (4.5,1.2);
Complex c2 (3.6,1.5);
Complex c3 = c1 + c2;
Complex c4 = c3 + 1.4;
Complex c5 = 8.0 - c4;
//Complex c6 = 1.2 + c4;
}
1。函数声明与函数定义之间有什么区别?
函数定义必须有函数主体,而且参数名称必须有。
函数声明没有主体,参数名称可有可无,但必须有类型,声明后还必须有分号。
2。为什么默认参数描述符出现在函数声明中而不在函数其定义中?
3。解释值传递和引用传递之间的区别,为什么使用其中一个而不使用另外一个?
不应该把较大的对象或者复制开销很大的对象通过值进行传递,因为创建零时拷贝将会消耗大量无必要的时间,机器周期和内存。
4。解释预处理宏与内联函数的区别。
内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是
通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时
候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开
销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一
些问题。
5。如果要针对Fraction对象重载算术运算符,成员函数与非成员全局运算符相比哪个更好?
运算符的重载:可以将运算符重载为成员函数,也可以重载为全局函数。这里首先注意到的不同将是调用方式的不同:成员运算符需要使用一个对象作为左侧的操作数,而相反的,全局函数则允许两个操作数采用相同的形式。
我们可以根据函数是否为const来对函数进行重载
#include "stdlib.h"
#include "iostream"
using namespace std;
class tgh
{
public:
tgh():i(3){}
const int a() const {return 5;}
int a(){return i;}
protected:
int i;
private:
};
void main()
{
const tgh v;
tgh s;
const int i=s.a();
int const j=s.a();
printf("%d,%d",j,i);
const int k = v.a();
cout<<k<<endl;
}
---------------------------------------------------------
#include "IOSTREAM"
using namespace std;
/*the left value can be changed*/
int& maxi(int& x,int& y){
return (x > y) ? x : y;
}
int main(){
int a = 10, b = 20;
maxi(a, b) = 5;
maxi(a, b) += 6;
++maxi(a,b);
cout << a << '/t'; << b << endl;
return 0;
}
本文介绍了如何在C++中实现复数类及其基本运算,包括加法、减法等,并探讨了运算符重载、内联函数及成员与非成员函数的选择。此外,文章还讨论了函数声明与定义的区别、默认参数描述符的位置、值传递与引用传递的区别以及预处理宏与内联函数的不同。

被折叠的 条评论
为什么被折叠?



