类和组合
对象数组和对象指针
可以进行定义对象数组和对象指针
一维对象数组定义方法
类名 数组名[下标表达式];
类名 数组名[下标表达式]={类名(…),类名(…)};
//第一种默认调用系统给的无参构造函数
//第二种通过后面{}决定
class A
{
int x,y;
public:
A(){
x=0,y=0;}
A(int x,int j=0){
x=i,y=j;}
};
如果这样定义的话
A obj[4]={
1,2};
//如何传递?obj[0]出态为x=1,y=0
//obj[1]初态为x=2,y=0
对象数组成员的引用同样注意限制性
————————————————————
对象指针
对象所占据的内存空间用于存放数据成员,对象的存储空间的起始地址就是对象的指针!!! 定义方法
类名 *对象指针名
访问方法
(*对象指针名).成员名
对象指针名->成员名
!!但要注意访问是否合法还要保证访问成员是公有成员!!
所有指针必须先赋值才能被使用
!!对象指针也是指针 和其他指针使用方法是一样的!!
this指针----自引用指针
①当对象被赋初值之后,就会出现一个隐藏的指针,这个对象的this指针就??指向!!内存中保存该对象数据的存储空间的首地址
②另外在类的成员函数中是可以使用这个this 指针的
class CMyclass
{
private:
CMyclass *this;
...
public:
CMyClass(){
...}
...
};
一般不使用 使用的话就是需要在成员函数的实现中访问this所指的对象本身,而不是其各个成员
比较不错的例子 理解this指针
#include<iostream.h>
class ThisSample
{
int n;
public:
void SetValue(int m){
n=m;}
void AddValue(int m)
{
ThisSample q;//函数内部临时对象????
//???
q.n=n+m;//n相当于this->n n+m赋给了q.n
*this=q;//把q复制给this指针所指的那个对象
//没调用复制构造函数
}
void Display()
{
cout<<"n="<<n<<endl;}
void main()
{
ThisSample s;
s.SetValue(10);
s.Display();
s.AddValue(5);
s.Display();
}
————————————————————
类的组合
就是类中内嵌对象成员
面向对象:复杂对象进行分解抽象,复杂对象分解为简单对象的组合。
对象成员的初始化
成员初始化列表:
例 CPoint::CPoint(int xx,int yy):x(xx),y(yy)
{cout<<“constructor called”;}
!调用构造函数时先执行成员初始化列表 再按顺序执行构造函数体内语句
!与说明普通对象不同,在说明对象成员时并没有创建该对象,等创建外层类的实例时才会为对象成员分配内存初始化
!类中有对象成员,先执行所有对象成员的构造函数,再执行当前类的构造函数体
代码理解:
class CPoint
{
private:
int x,y;
public:
CPoint(int i=<