1、
如果想在同类的多个对象之间实现数据共享,也不要用全局对象,可以用静态的数据成员。如果希望个对象中的数据成员的只是一样的就可以把它定义为静态数据成员这样他就为个对象所共有而不只属于某个对象的成员,所有对象都可以引用他静态的数据成员在内存中只占一份空间,而不是每个对象都分别为他保留一份空间,每个对象都可以引用这个静态数据成员静态数据成员的只对所有对象都是一样的,如果改变他的职责在个对象中这个数据成员的只同时改变了这样可以节约空间,提高效率。
2、1.C++中只能对已有的C++运算符进行重载,不允许用户自己定义新的运算符。
2.C++中绝大部分的运算符可重载,除了个别运算符
3.运算符重载后不能改变运算符的操作对象的个数。如:"+"是实现两个操作数的运算符,重载后仍然为双目运算符。
4.重载不能改变运算符原有的优先级和原有的结合性。
5.运算符重载不能全部是C++中预定义的基本数据,这样做的目的是为了防止用户修改用于基本类型数据的运算符性质
3、C++提供了构造函数来处理对象的初始化构造函数是一种特殊的成员,函数与其他成员函数不同,不需要用户来调用。他而是在建立对象时自动执行
1.构造函数的名字,必须以那名同名不能任意命名。
2.他不具有任何类型没有返回值。
4、
注释是对一段代码的解释和说明,可提高程序代码的可读性,让人们能够更加轻松地了解代码,尤其在大型项目开发和团队项目中,注释是必不可少的。注释了测试代码就以阻止执行。
5、
继承是面向对象三大基本特征之一(继承,封装,多态),继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
组合是通过对现有对象进行拼装即组合产生新的具有更复杂的功能。
继承与组合都是面向对象中代码复用的方式。父类的内部细节对子类可见,其代码属于白盒式的复用,而组合中,对象之间的内部细节不可见,其代码属于黑盒式复用。继承在编码过程中就要指定具体的父类,其关系在编译期就确定,而组合的关系一般在运行时确定。
6、
2\
/*定义一个基类(Base)有姓名(stringname)、性别(chars)、年龄(intn);
再由基类公有派生出教师类(Teatcher)和学生类(Student),
教师类增加工号(stringworkNum)、职称(stringtitle)和工资(doublepay),
学生类增加学号(stringlearnNum)、班级(stringclassNum)、和成绩(doublegrade)
两个派生类都增加方法Display,用于显示本类对象所有信息;
在main函数中分别定义两个类的对象t和s,分别调用Display。*/
#includeiostream
#includestring
usingnamespacestd;
//namespacestd;
classBase
{
public:
Base(stringa,charb,intc)
{
name=a;
s=b;
n=c;
}
voiddisplay()
{
cout"姓名"nameendl;
cout"性别"sendl;
cout"年龄"nendl;
}
private:
stringname;
chars;
intn;
};
classTeacher:publicBase
{
public:
Teacher(stringa,charb,intc,stringc2,stringc3,doubles1):Base(a,b,c)
{
workNum=c2;
title=c3;
pay=s1;
}
voiddisplay2()
{
cout"教师"endl;
display();
cout"工号"workNumendl;
cout"职称"titleendl;
cout"工资"payendl;
coutendl;
}
private:
stringworkNum;
stringtitle;
doublepay;
};
classStudent:publicBase
{
public:
Student(stringa,charb,intc,stringc2,stringc3,floats1):Base(a,b,c)
{
learnNum=c3;
classNum=c3;
grade=s1;
}
voiddisplay1()
{
cout"学生"endl;
display();
cout"学号:"learnNumendl;
cout"班级:"classNumendl;
cout"成绩:"gradeendl;
coutendl;
}
private:
stringlearnNum;
stringclassNum;
doublegrade;
};
voidmain()
{
//Teacher(stringa,charb,intc,stringc2,stringc3,doubles1):Base(a,b,c)
Teachert("老师","男",30,"","教师",.0);
Students("学生","女",20,"0","计科1",86);
s.display1();
t.display2();
}
3\
#includeiostream
#includeiomanip
usingnamespacestd;
classSalary
{
private:
intno;
stringName;
doubledeal,tax,fact;
public:
voidcount();
voiddisplay();
};
voidSalary::count()
{
cinno;
cinName;
cindeal;
cintax;
fact=deal-tax;
}
voidSalary::display()
{
cout"职工号为:"endl;
coutresetiosflags(ios::right)setw(8)setiosflags(ios::left)noendl;
cout"职工姓名为:"endl;
coutsetw(8)setiosflags(ios::left)Nameendl;
cout"职工应发工资为:"endl;
coutsetw(12)setiosflags(ios::right
ios::fixed)setprecision(2)dealendl;
cout"职工税金为:"endl;
coutsetw(12)setiosflags(ios::right
ios::fixed)setprecision(2)taxendl;
cout"职工实发工资为:"endl;
coutsetw(12)setiosflags(ios::right
ios::fixed)setprecision(2)factendl;
//iso::fixed是操作符setiosflags的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度专范围内尽可能的把数属字移向小数点右侧
}
intmain()
{
Salarys;
s.count();
s.display();
return0;
}
4\//长方柱体积
#includeiostream
usingnamespacestd;
classbox//建立长方柱的类
{
intc,k,g;
public:
box(intcc,intkk,intgg);
intchang(){returnc;}
intkuan(){returnk;}
intgao(){returng;}
};
box::box(intcc,intkk,intgg)//构造函数
{
c=cc;k=kk;g=gg;//初始化长宽高
}
intmain()
{
boxbox1(10,25,30);
boxbox2(15,30,5);//传入两个长方柱的数据
cout"Thevolumeofbox1is"box1.chang()*box1.kuan()*box1.gao()endl;
cout"Thevolumeofbox2is"box2.chang()*box2.kuan()*box2.gao()endl;
}
1、
#includeiostream
usingnamespacestd;
classStudent
{
public:
Student(intn,floats):num(n),score(s)
{};
intnum;
floatscore;
};
voidmain()
{
Studentstu[5]={Student(,78.5),Student(,85.5),Student(,98.5),Student(,99.0),Student(,93.0)};
voidmax(Student*);
Student*p=stu[0];
max(p);
}
voidmax(Student*arr)
{
floatmax=arr[0].score;
intk=0;
for(inti=1;i5;i++)
if(arr[i].scoremax)
{
max=arr[i].score;
k=i;
}
coutarr[k].num""maxendl;
}
2,
#includeiostream
usingnamespacestd;
classDate{
private:intyear,month,day;
public:
Date(inty,intm,intd)
{
year=y;month=m;day=d;
}
voidnextday();
voiddisplay(){
coutyear"/"month"/"dayendl;
}
};
voidDate::nextday(){
inttotaldays[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
day++;intleap=(year%==0
year%4==0year%!=0);
if(daytotaldays[leap][month-1]){day=1;month++;if(month12){month=1;year++;
}
}
}
voidmain()
{
intd,m,y;
cout"请输入年、月、日:\n";
cinymd;Dated1(y,m,d);
cout"今天是:";d1.display();
d1.nextday();cout"明天是:";
d1.display();
}
3、
#includeiostream
usingnamespacestd;
//3.定义复数类CComplex,定义包含2个参数(其中一个有默认值)的构造函数,定义show()函数展示复数值,重载运算符+实现两个复数相加(重载为成员函数),编写主程序对类进行测试;
classCComplex{
public:
CComplex(doubler,doublei=0.0){
re=r;
im=i;
}
voidshow(){
coutre;
if(im0){
cout"-"-im"i"endl;
}else{
cout"+"im"i"endl;
}
}
CComplexoperator+(CComplexobj){
CComplextmp(re+obj.re,im+obj.im);
returntmp;
}
private:
doublere,im;
};
intmain()
{
CComplextest1(1,2),test2(2,-3);
(test1+test2).show();
return0;
}
4、
#includeiostream
usingnamespacestd;
classbase
{
public:
base(doublex,doubley)
{
a=x;
b=y;
}
virtualvoidarea()=0;
protected:
doublea;
doubleb;
};
classTriangle:publicbase
{
public:
Triangle(doublex,doubley):base(x,y)
{};
voidarea()
{
cout"三角形面积为:"0.5*a*bendl;
}
};
classCircular:publicbase
{
public:
Circular(doublex):base(x,x)
{};
voidarea()
{
cout"圆的面积为:"3.14*a*aendl;
}
};
classSquare:publicbase
{
public:
Square(doublex):base(x,x)
{};
voidarea()
{
cout"正方形面积为:"a*aendl;
}
};
intmain()
{
base*ptr;
Triangleob1(5,4);
ptr=ob1;
ptr-area();
Circularob2(2);
ptr=ob2;
ptr-area();
Squareob3(3);
ptr=ob3;
ptr-area();
system("pause");
return0;
}
5、
//定义一个Rectangle类,有长itsWidth、宽itsLength等属性,重载其构造函数Rectangle()和Rectangle(intwidth,intlength)。
#includeiostream
usingnamespacestd;
classRectangle//定义一个Rectangle类
{
public:
Rectangle(){Length=1,Width=2;}
Rectangle(intlength,intwidth){Length=length;Width=width;}
~Rectangle(){}
intGetLength(){returnLength;}
intGetWidth(){returnWidth;}
private:
intLength,Width;//有长itsWidth、宽itsLength等属性
};
intmain()
{
Rectanglerect1;
cout"Length:"rect1.GetLength()endl;
cout"Width:"rect1.GetWidth()endl;
intlength,width;
cout"Enterthelength:"endl;
cinlength;
cout"Enterthewidth:"endl;
cinwidth;
Rectanglerect2(length,width);
cout"TheLength:"rect2.GetLength()endl;
cout"TheWidth:"rect2.GetWidth()endl;
}