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(); }