一.类和对象
1.含义:(小编自己的理解)类是某些集合的特征的抽象。对象是类的实体。
比如:世界上有很多人,但是“人”这个词是一开始就存在的吗。并不是,我们把“人”叫做“人”,那么老外可能就会叫做“person”或者“people”。那么我们就可以说“人”就是一种抽象,就是类;而我们每一个人就相当于是“人”这个类的一个个实体。
2.class的定义
(1)类的内容有哪些?
类内成员都有什么呢?
①数据成员
②成员函数
如:
class A{
public:
//成员函数
void print(){
cout<<"hehe!!!"<<endl;
}
private:
//数据成员
int a;
}
看到这里,哦我们会发现class其实与struct很相似
C++中的struct可以这样用:
struct A {
void print() {
cout << "hehe!!!" << endl;
}
int a;
};
小编的话来说,class与struct一模不一样。
看下面两段代码:
结构体变量操作结构体内的成员易如反掌;但是,类的对象访问类内的成员时,出现了不可访问的错误。
引入权限的概念。
权限:
public:类外部的对象可以访问
private:类外部的对象不能访问
protectd:类外部的对象不能访问
二.类的两种定义方式
1.成员函数在类内部定义
class A {
public:
void print() {
cout << "inner" << endl;
}
int a;
};
2.成员函数在类外部定义
class B {
public:
void print();
int a;
};
void B::print() {
cout << "out" << endl;
}
在类外定义类的成员函数时:
格式:
返回值类型 类名::函数名
三.类的大小
计算原则:只计算数据成员的大小,不包含成员函数,数据成员大小遵循结构体的内存对齐原则。
注意:
①空类的大小:1B
②非空类但是又成员函数的类的大小:1B
四.this指针
先看一段代码:
不同的对象调用类的函数时,调用了同一个类的函数。但是类中的成员函数是不存储在类中的。
原因:thiis指针的存在:
不同的对象调用同一个类的函数时,参数隐含为该对象的地址
这是以上代码的等价写法:
class A {
public:
void print() {
cout << this->year << endl;
}
int year;
};
int main() {
A a1;
A a2;
a1.year = 2017;
a2.year = 2018;
a1.print(&a1);
a2.print(&a2);
return 0;
}
注意:
this指针是类的成员函数的第一个参数,并且是隐式的。