1.类的声明
类是一种用户自定义类型,声明形式如下:
Class 类名称
{
Public:
公有成员(外部接口)
Private:
私有成员
Protected:
保护成员
};
2.公有、私有、保护成员
公有成员(public)
公有成员是在public关键字的后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数
私有成员(private)
私有成员在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问
保护成员(protected)
保护成员在关键字protected后面声明,与private类似,其差别表现在在继承与派生时对派生类的影响不同
3.成员函数
成员函数即方法,既可以在类内进行实现,也可以在类外实现
如果在类内实现的话,编译器会默认将其的类型设置为inline类型即内联函数
下面用一个例子来理解一下:
首先写一个Student.h的文件,在里面对类进行声明。可以看到现在我是将a_这个变量定义在public下,所以是可以被公共访问的,而b_和c_这两个变量是定义在private下的,所以只能在类内进行访问
接下来,写一个Student.cpp来对两个成员函数(方法)进行实现,这种方法即为在类外实现,功能分别为对a_ b_ c_三个变量进行赋值以及打印结果
最后,来进行main函数的编写,首先定义了Student的一个对象,调用初始化变量的函数,分别初始化为1,2,3,接着访问a_变量,如果最后输出的结果为4,2,3,说明成功的访问了a_变量,证明public中的变量是可以在类外访问的
我们来看一下结果:
最后的结果是4,2,3,说明a_能够在类外访问,成员函数也都成功执行了
4.class VS struct
Class数据成员默认是私有的
Struct数据成员默认是共有的,在C++中对struct也有所升级,不仅定义方法改变了,也可以跟类一样在其中定义方法(成员函数)
下面我们来验证一下:
5.this指针的作用
在了解this指针的作用前,我们先来看一下下面程序中的class和struct的大小分别为多少
我们对上面的代码进行些许修改
#include <iostream>
using namespace std;
class Test
{
int a_;
int b_;
void displayA()
{
cout << "Display A!" << endl;
}
};
struct Test1
{
int c_;
int d_;
void displayB()
{
cout << "Display B!" << endl;
}
};
int main()
{
Test t1;
Test1 t2;
cout << "Size t1:" << sizeof(Test) << endl;
cout << "Size t2:" << sizeof(Test1) << endl;
return 0;
}
我们可以看到不管是class还是struct的大小都是8,说明class和struct的大小只与成员有关,而与成员函数(方法)无关。
这是因为class的空间中只储存了成员,而成员函数是储存在共享空间的,即所有的类都可以进行访问,那么计算机是怎么知道到底是哪一个类调用了这个函数呢,这时候就需要用到this指针了。
This指针保存的是调用这个方法的对象的地址,在对象调用方法的的时候会自动被传参给方法。
#include <iostream>
using namespace std;
class Test
{
public:
int a_;
int b_;
void displayA()
{
cout << "Display A!" << endl;
cout << "this->a = " << this->a_ << endl;
}
};
struct Test1
{
int c_;
int d_;
void displayB()
{
cout << "Display B!" << endl;
}
};
int main()
{
Test t1;
Test1 t2;
t1.a_ = 1;
t1.displayA();
return 0;
}