一.类的引入
1.类(class)是C++中的一种特殊的数据结构,它封装了数据和操作这些数据的函数。
2.类中的数据被称为成员变量,而函数则被称为成员函数。
3.类可以被看作是一种模板,用于创建具有相同属性和行为的多个对象。
在C语言中结构体是一种复合数据类型,它只能包含数据而不能包含函数。在C++中则不同,它允许结构体(struct)中包含函数,并且给出了一个新的关键字class。
class Box {//...
};
二.类的定义
1.类和结构体的区别
类和结构体在C++中用法类似,我们可以根据不同的场景变换使用,区别如下:
对比对象 | class | struct |
默认访问权限 | 私有(private ) | 公开(public ) |
支持继承 | 支持 | 支持,但默认是公开继承 |
成员函数 | 可以包含成员函数 | 可以包含成员函数 |
构造函数和析构函数 | 支持构造函数和析构函数 | 支持构造函数和析构函数 |
访问控制修饰符 | public、private、protected | public、protected、private(C++11起) |
语义上的区别 | 面向对象编程,封装和抽象 | 数据打包,通常不含函数 |
使用场景 | 面向对象设计,隐藏实现细节 | 数据存储,直接访问成员 |
2.类的使用
类中的内容的调用与结构体类似,使用( . )调用,如下:
class Date
{
public:void Init(int year){_year = year;}
private:int _year;
};int main(){Date A;A.Init(2);return 0;
}
注意:公开(public)的对象可以在类外进行调用,而私有(private)和保护(protected)的对象只能在类内进行调用。访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止,如果后面没有访问限定符,作用域就到 } 即类结束。
三.类的作用域
class Date
{
public:void Init(int year);private:int _Year;
};void Date::Init(int year) {_Year = year;
}int main(){Date A;A.Init(2);//如果函数私有,语法规定不允许调用return 0;
}
注:由于类中私有的内容在类外不允许访问,因此一般情况下函数公开。
四.类的实例化
用类类型创建对象的过程,称为类的实例化。
1. 类是对对象进行描述的,它限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它。
2.对象是类的一个实例,它包含了类中定义的所有数据成员的值。对象可以是类的一个变量,或者是通过类这种数据类型创建出来的一份实实在在的数据,因此它会占用内存空间,一个类可以实例化出多个对象。
如下所示,Date就是类,而A则是Date类的一个对象:(Date类中的_Year是没有数值的)
class Date
{
public:void Init(int year);void Print();
private:int _Year;};void Date::Init(int year) {_Year = year;
}void Date::Print(){cout << _Year;
}int main() {Date A;A.Init(2);A.Print();return 0;
}
五.类对象的大小
class A
{
public:
void PrintA()
{cout<<_a<<endl;
}
private:
char _a;
};
类的大小不包括类中的函数,一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐。(如上内存大小为一)
六.this指针
class Date
{
public:void Init(int year){_year = year;}
private:int _year;
};int main(){Date A;A.Init(2);return 0;
}
类中的函数之所以能直接调用类内的变量,是因为类中包含了一个this指针,特性如下:
1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。
class Date
{
public:void Init(int year){this->_year = year;}
private:int _year;
};int main(){Date A;A.Init(2);return 0;
}
--------------------------------------------------------------------------------------------------------------------------------