重要链接 贺利坚老师教学链接
代码阅读:
代码片段二:
#include<iostream>
using namespace std;
class CE
{
private:
int a,b;
int getmin(){return (a<b? a:b);}
public:
int c;
void SetValue(int x1,int x2, int x3)
{
a=x1;
b=x2;
c=x3;
}
int GetMin();
};
int CE::GetMin()
{
int d=getmin();
return (d<c? d:c);
}
int main()
{
int x=5,y=12,z=8;
CE *ep;
ep=new CE;
ep->SetValue(x+y,y-z,10);
cout<<ep->GetMin()<<endl;
CE a=*ep;
cout<<a.GetMin()*3+15<<endl;
return 0;
}
解读main函数:
CE *ep;
只是在栈上开辟一个4字节的空间,用来存放CE类型的指针变量ep
ep=new CE;
在堆中开辟CE类型对象的空间, 并使指针ep指向该CE对象.同时该对象由系统默认构造函数生成
ep->SetValue(x+y,y-z,10);
调用公有成员函数SetValue(17,4,10)
cout<<ep->GetMin()<<endl;
输出4
CE a=*ep;
在栈上创建CE类型对象a ,并将 ep指向的对象赋值给 a,执行类对象的赋值操作
反汇编代码:
mov eax,dword ptr [ebp-2Ch]
mov ecx,dword ptr [eax]
mov dword ptr [ebp-40h],ecx
mov edx,dword ptr [eax+4]
mov dword ptr [ebp-3Ch],edx
mov eax,dword ptr [eax+8]
mov dword ptr [ebp-38h],eax
初步观察,对象赋值貌似只是对成员变量进行复制而已!
cout<<a.GetMin()*3+15<<endl;
输出27