C++笔记:类和对象(一)

一.类的引入

        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指针赋值。

        2. 只能在“成员函数”的内部使用。
        3. this 指针本质上是 成员函数 的形参 ,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以 对象中不存储 this 指针
       
        4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传
递,不需要用户传递。
  
        我们可以如下调用this指针来证明它的存在。
class Date
{
public:
	void Init(int year)
	{
		this->_year = year;
	}
private:
	int _year;
};

int main(){
    Date A;
    A.Init(2);
    return 0;
}

-------------------------------------------------------------------------------------------------------------------------------- 

相关推荐

  1. C++ 对象 知识笔记

    2024-05-13 07:50:11       37 阅读
  2. C++核心编程:对象 笔记

    2024-05-13 07:50:11       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 07:50:11       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 07:50:11       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 07:50:11       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 07:50:11       20 阅读

热门阅读

  1. 02.01移除重复点

    2024-05-13 07:50:11       14 阅读
  2. 富格林:正规经验加持交易安全

    2024-05-13 07:50:11       8 阅读
  3. Lua 基础 01 入门

    2024-05-13 07:50:11       13 阅读
  4. Spring Boot应用部署 - JAR包部署瘦身

    2024-05-13 07:50:11       16 阅读
  5. [力扣题解]860. 柠檬水找零

    2024-05-13 07:50:11       15 阅读
  6. 数据结构(五)什么是算法

    2024-05-13 07:50:11       12 阅读
  7. Unity3D安装图文详细步骤

    2024-05-13 07:50:11       10 阅读
  8. 第十三届蓝桥杯国赛

    2024-05-13 07:50:11       10 阅读