由于自己本人上课不太认真,只能靠自己学习例题总结。
希望能给大家一些便捷,让大家开心学习C++。
对象的创建与使用:
例题5-1 定义一个点类,生成对象,将点的坐标显示在屏幕上:
#include<iostream>
using namespace std;
class Point{
int x,y;
public:
void setXY(int a,int b){
x=a;
y=b;
}
int getX(){
return x;
}int getY(){
return y;
}
};
int main()
{
Point p1,p2;
p1.setXY(1,2);
p2.setXY(3,4);
cout<<"点p1的x坐标为:"<<p1.getX()<<endl;
cout<<"点p1的y坐标为:"<<p1.getY()<<endl;
cout<<"点p2的坐标为:("<<p2.getX()<<","<<p2.getY()<<")"<<endl;
return 0;
}
例题5-2 观察类的所占的字节:
#include<iostream>
using namespace std;
class A{
int x;
public:
void setX(int b){
x=b;
}
};
int main(){
A a;
cout<<sizeof(int)<<endl<<sizeof(a)<<endl;
return 0;
}
类成员的访问能力
例题5-3:观察类成员访问控制能力:
#include<iostream>
using namespace std;
class A{
private:
int i;
public:
char c;
public:
void setI(int j){
i=j;
}
void display(){
cout<<"i="<<i<<endl<<"C="<<c<<endl;
}
};
class B{
public:
char c;
public:
void display(){
cout<<"c="<<c<<endl;
}
};
int main(){
A a;
B b;
//a.i=1; error
a.c='e';b.c='f'; //ok
a.setI(8); //通过接口访问公有成员
a.display(); //ok
b.display();
return 0;
}
通过这个例子容易看出来:其实对于类来说 :在类外面只能访问公有的成员。
但是对于要访问私有成员:需要利用公有成员函数间接调用。
实例1:设计一个圆Circle类,能够求出圆的面积:
#include<iostream>
#include<cmath>
using namespace std;
const double Pi=acos(-1);
class Circle{
private:
double m_r;
public:
void setR(double r){
m_r=r;
}
double getR(){
return m_r;
}double getArea(){
return Pi*m_r*m_r;
}
};
int main()
{
Circle c;
c.setR(3);
cout<<"Circle's r is "<<c.getR()<<endl;
cout<<"Circle's area is "<<c.getArea()<<endl;
return 0;
}
通过这个实例其实可以看出来:
调用公有的成员函数或者变量:直接用 “.”来实现好比C语言里的结构体。
实例2:设计一个数字时钟,可以设置时间和显示时间
#include<iostream>
using namespace std;
class Clock{
private:
int h;
int m;
int sec;
public:
void setTime(int nh,int nm,int ns){
h=nh;
m=nm;
sec=ns;
if(h<0||h>23||m<0||m>59||sec<0||sec>59){
cout<<"illegal! time"<<endl;
exit(1);
}
}
void showTime(){
cout<<h<<":"<<m<<":"<<sec<<endl;
}
};
int main(){
Clock a;
a.setTime(14,1,2);
a.showTime();
return 0;
}
类的信息隐藏
由于为了实现利用类的接口,需要把设置 .h 和 .cpp 两个文件来分别实现。
.h 负责实现提供类的声明和类函数的实现,
.cpp 负责利用类对应的接口函数来实现对应功能即可.
建立2个文件,分别存放长方形Rectangle 类的声明和实现、类的使用。
//#ifndef RECTANGLE_H_INCLUDED
//#define RECTANGLE_H_INCLUDED
class Rectangle{
int len,w;
public:
void setL(int len);
void setW(int w);
int getL();
int getW();
int getArea();
};
//#endif // RECTANGLE_H_INCLUDED
#include"Rectangle.h"
#include<iostream>
using namespace std;
void Rectangle::setL(int L){
len=L;
if(L<0){
printf("L:illegal!\n");
exit(1);
}
}
void Rectangle::setW(int W){
w=W;
if(W<0){
printf("W:illegal!\n");
exit(1);
}
}
int Rectangle::getL(){
return len;
}
int Rectangle::getW(){
return w;
}
int Rectangle::getArea(){
return len*w;
}
int main(){
Rectangle A;
A.setL(10);
A.setW(20);
cout<<"L: "<<A.getL()<<endl;
cout<<"W: "<<A.getW()<<endl;
cout<<"Area: "<<A.getArea()<<endl;
return 0;
}
对象的初始化与消亡:
构造函数
由于类的复杂性,有必要专门设计一个函数来进行对象的初始化工作,
引例:初始化时刻需要做点是什么.如定义了一个新的对象时,需要设计一些提示词:
如“创建完成,目前是第N个对象”.
一个简单的例子:
#include<iostream>
using namespace std;
class A{
int i;
public:
A(){