C++复习
1.在C++中对象声明时构造函数的调用是顺序调用,析构函数是逆序调用,说明是使用堆栈来存储。
2、组合类的声明:
private:
??? CPoint ??? ptCenter;
??? CSize? ??? size;
};
CRect::CRect(int left, int top, int right, int bottom)
??? ??? :size(right-left, bottom-top),??? ptCenter((left+right)/2, (top+bottom)/2)
??? ??? //使用组合对调用类对象的初始化
{? }
void main()
{
??? CRect rc(10, 100, 80, 250);
??? rc.Show();
}
3.this为当前对象的引用
void COne::copy(COne &a)
{
?? if (this == &a) return; //this为当前对象的引用。
??? *this = a;
}
void main()
{
??? COne one, two(3, 4);
??? one.print();
??? one.copy(two);
??? one.print();
}
4.静态数据成员的声明和初始化
private:
??? static int nSum;??? ??? // 声明静态数据成员
};
int CSum::nSum = 0;??? ??? // 静态数据成员的初始化,前面要用数据类型
}
cout<<"sum = "<<nSum<<endl;//直接调用,不像JAVA中要声明限定符
5.友元函数
friend? CPoint? Inflate(CPoint &pt, int nOffset); ??? // 声明一个友元函数
private:???
??? unsigned ??? ?m_x,? m_y;
};
CPoint Inflate ( CPoint &pt, int nOffset ) ??? ??? // 友元函数的定义
{
??? CPoint ptTemp = pt;???
??? ptTemp.m_x += nOffset;?? // 直接改变私有数据成员m_x和m_y ,友员函数不会继承,是单向的
??? ptTemp.m_y += nOffset;???
??? return ptTemp;
}
6.指针与引用
??? char *str;
??? ??? str = bMan?"男":"女";
??? ??? cout<<"性别:"<<str<<endl;//当将str改为*后输出?,改为&str输出:0x0012FE80
??? }
7.继承中是多继承,private类型的不可以访问,但是可以通过public类型的间接访问
private:
??? int Age;
};//1.class要用;号来结束
void main()??? ??? ??? ??? ???
{?????????????????? //派生类的child ob;会先调用父类的默认然后自己的默认构造函数。
??? ME me(24);//2.可将自己初始化;可调用公有基类成员函数,将私有数据初始化;
??? me.SetData("JeromeCen","0807100404");
//3.可以利用父类的public方法组件自己的方法,并能够间接的访问私有成员???
??? me.InputScore( 85, 76, 91 );
??? me.Print();
??? me.ShowAge();
}
8.虚基类,虚函数,抽象类
#include<iostream.h>
class Shape//若有虚基类是为了多继承同一父类时共同维护一份父类拷贝
{ protected:
????? double x,y;
?? public:
????? void set(double i, double j)//虚函数是为了统一接口,动态联编
????? { x=i; y=j;? }
????? virtual void area()=0; //声明纯虚函数? ,有纯虚函数的类为抽象类
};
class Triangle: public Shape
?? { public:
??????? void area()
??????? { cout<< "三角形面积: " <<0.5*x*y<<endl;?? }?
??? };
?class Rectangle: public Shape
?? { public:
??????? void area()
??????? { cout<<"矩形面积:" <<x*y<<endl; ;? }?
??? };
void main()
? { Shape *p;
??? char *p1="5";
//测试说明了基本类型指针赋值后*p p都表示值,而&总表示十六位的地址。对象类型则*p出错,p和&p都为地址
cout<<"P的值为:"<<&p1<<endl;
???? Triangle t;
???? Rectangle r;
???? p=&t;
???
???? p->set(5.1,10);
???? p->area();??
???? p=&r;
???? p->set(5.1,10);
???? p->area();? }