类与对象的定义与访问
面向对象的方法支持继承、多态机制
定义类和对象
类由成员构成:
数据成员——描述对象的属性
成员函数——描述对象的方法
介绍了几类不同的访问特性。
对象是类类型的变量,说明方法与普通变量相同。说明一个类类型的对象之后,编译器为每个对象的数据成员分配内存,对象没有成员函数的副本(相对于普通变量来说,分配的是内存,对于函数来说就是建立副本,他俩意思其实差不多,只不过是针对他俩另说),类成员函数可以被对象调用。
定义变量时要分配存储空间,同样,定义一个对象时要分配存储空间,一个对象所占的内存空间是类的数据成员所占的空间总和。局部变量在栈区(系统自动分配和释放内存),堆区是人为用malloc申请的,最后用free()函数释放,静态和全局的在静态区,类的成员函数存放在代码区。
//类中定义成员函数内联函数处理
内联函数补充:
内联扩展是用来消除函数调用时的时间开销。
它通常用于频繁执行的函数,对于小内存空间的函数非常受益。
注意:
1.递归函数不能定义为内联函数
2.内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数。
3.内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数。
4.对内联函数不能进行异常的接口声明。
访问对象成员
格式
类外用 “ . ” 和 “ -> ” 运算符访问对象成员
1.用“.”访问的略
2.用“->”访问
class a
{
public:
a();
~a();
int x, y;
void print();
};
a::a()
{
cout << "contructed" << endl;
}
a::~a()
{
cout << "deleted" << endl;
}
void a::print()
{
cout << x << endl << y << endl;
}
int main()
{
a* b1 = new(a);
b1->x = 3;
b1->y = 4;
b1->print();
delete b1;
return 0;
}
对象指针
class a
{
public:
a();
~a();
int x, y;
void print();
};
a::a()
{
cout << "contructed" << endl;
}
a::~a()
{
cout << "deleted" << endl;
}
void a::print()
{
cout << x << endl << y << endl;
}
int main()
{
a c1;
a* c2;
c2 = &c1;
c2->x = 1;
c2->y = 2;
c2->print();
//华丽丽的分界线
a* b1 = new(a);
b1->x = 3;
b1->y = 4;
b1->print();
delete b1;
return 0;
}
this指针
由于系统不会为每个类的对象建立成员函数副本的缘故,但是类的对象又得调用成员函数。因此,C++提供了一个称为this的隐含指针参数,方便知道在哪个对象上操作,在这个对象调用成员函数的时候,这个对象的地址就已经被传递给this指针。同时this指针不能显示说明,但可以显示使用。例如:
(*this).a=a或者this->a=a;用于形参和数据成员重名的时候用,当然也可以用作用域::来写,一些用成员函数重载运算符的时候也会用到。
上述加粗的地方解释为:
void setXY ( int a, int b)
{
this-> a = a ; this-> b = b ; }
或者写成:
class A
{
void setXY ( int a, int b)
{
A:: a = a ; A::b = b ; }
};
this指针是个常指针。(目前没遇到相关题目)
不能显示说明,可以显示使用。
你写的时候长这样:
void setXY ( int a, int b) {
x = a ; y = b ; }
实际上,在系统看来,是这样的:
void setXY ( int a, int b, Simple * const this )
{
this