程序员面试笔记5---类



#include <iostream>
using namespace std;


// 类---抽象性和封装性,注意私有成员对类内函数开放(不同对象之间可以相互调用)
// 类的私有成员变量定义:_name,_power
// 在类体内定义的成员函数,是内联成员函数
// 类体内this指针的类型为const,仅允许类内使用
// 构造函数隐式调用,成员初始值列表,转换构造函数,复制构造函数
// 析构函数:对于一般的数据类型,delete和delete[]是一致的,而对于类数组,只能使用delete[]
// 操作符重载:一元操作符,二元操作符,输入输出流
// const成员,const成员函数---const成员数据只能且必须通过初始化列表赋值,const成员函数只能是非静态非友元的,且不能调用非const成员函数;const成员
// 函数不能对数据成员进行操作,只能更改静态数据的值;const对象只能调用const成员函数;mutable可以修改成员函数权限,使之能够被const成员函数修改
// static成员,static成员函数---static成员在类定义外初始化,static成员函数只能对static成员进行操作
// 新建一个数组类,对以上数据进行操作




class SZ{
private:
int * _sz;
int _length;
const int t;
mutable int _t1;
static int _static;
public:
SZ():_sz(NULL),_length(0),t(0){cout<<"新建了一个空的新数组"<<endl;};// 构造函数
SZ(int *a,int length):_length(length),t(0){_sz = new int[length];for(int i=0;i<length;i++) _sz[i] = a[i];cout<<"新建了一个长度为"<<length<<"的新数组"<<endl;};//构造函数
SZ(int length);//拷贝构造函数
SZ(const SZ & s);//复制构造函数
~SZ(){delete [] _sz;cout<<"数组已销毁"<<endl;};
int getlength(){return _length;};
int getsz(int i) {return _sz[i];};
int tt(SZ s);
void f() const;
friend SZ operator +(SZ &s1,SZ &s2);
friend ostream& operator <<(ostream &o,const SZ &sz);
};


int SZ::_static = 0;//类的静态成员初始化方法,可以被const函数所修改


SZ::SZ(int length)
:t(0)
{
_length = length;
_sz = new int[length];
}
SZ::SZ(const SZ & s)
:t(0)
{
_length = s._length;
_sz = new int[_length];
for(int i=0;i<_length;i++)
{
_sz[i] = s._sz[i];
}
}


int SZ::tt(SZ s)
{
return s.getlength();
}


void SZ::f()const
{
_t1 = 0;            // 对于mutable修饰的变量,常函数能修改其值
_static = 1;        //常函数能修改静态成员变量
//_length = 0;      //常函数不能修改其他成员变量
cout<<_static<<endl; 
}


SZ operator +(SZ &s1,SZ &s2)
{
int length_min = (s1._length>s2._length)?s2._length:s1._length;
int length_max = (s1._length>s2._length)?s1._length:s2._length;
int *a = new int[length_max];
for(int i=0;i<length_min;i++)
{
a[i] = s1._sz[i]+s2._sz[i];
}
for(int i=length_min;i<length_max;i++)
{
if(s1._length>s2._length)
{
a[i] = s1._sz[i];
}
else
{
a[i] = s2._sz[i];
}
}
SZ ss = SZ(a,length_max);
delete a;
return ss;
}
ostream& operator <<(ostream &o,const SZ &sz)
{
for(int i=0;i<sz._length;i++)
{
o<<sz._sz[i]<<"  ";
}
o<<endl;
return o;
}


int main()
{

int a[] = {1,2,3};
int b[] = {1,4};
SZ m1 = SZ(a,3);
SZ m2 = SZ(b,2);
SZ m3 = m1+m2;
const SZ m4(3);
m4.f();
//cout<<m4.getlength()<<endl;  常对象不能调用非常函数
cout<<m3<<endl; // 常对象可以调用常函数
m3.f();
system("pause");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值