C++初阶学习第三弹——类与对象(上)

目录

一.初步认知对象

二.类的基本组成、

1.类的定义

2.类的访问限定符及封装

3.类的作用域

4、类的大小的计算

5.this指针

三.总结


一.初步认知对象

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

二.类的基本组成、

1.类的定义

cpp 复制代码
class A    
{
public:

void Init(int year)
 {
   _year=year;

 }
private:
  int _year;
  int* arr;
  
};

class是定义类的关键字, 其中A是类的名字,class{}中的是类的主体。

类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者 成员函数。

类的两种定义方式: 1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

  1. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名:

2.类的访问限定符及封装

  1. public修饰的成员在类外可以直接被访问

  2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

  4. 如果后面没有访问限定符,作用域就到 } 即类结束。

  5. class的默认访问权限为private

3.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。

cpp 复制代码
class Person
{
public:
 void PrintPersonInfo();
private:
 char _name[20];
 char _gender[3];
};

void Person::PrintPersonInfo()
{
 cout << _name << " "<< _gender << " " << _age << endl;
}

这里需要指定PrintPersonInfo是属于Person这个类域

4、类的大小的计算

cpp 复制代码
class A
{
public:
	void PrintA()
	{
		cout << _a << endl;
	}
private:
	int _a;
	
};
int main()
{
	cout << sizeof(A) << endl;
	return 0;
}

类在计算大小的时候,是不计算函数大小的

一个类的大小,实际就是该类中"成员变量"之和,当然要注意内存对齐。

5.this指针

cpp 复制代码
class Date
{ 
public:
 void Init(int year, int month, int day)
 {
 _year = year;
 _month = month;
 _day = day;
 }
 void Print()
 {
 cout <<_year<< "-" <<_month << "-"<< _day <<endl;
 }

private:
 int _year;     // 年
 int _month;    // 月
 int _day;      // 日
};
int main()
{
 Date d1;
 d1.Init(2022,1,11);
 d1>printf();
 return 0;
}

以上代码printf()按理来说应该有一个形参,可是实际却没有,因为类成员函数参数中是有一个默认的this指针表示创建的类变量的地址

以上代码实际是这样。

cpp 复制代码
class Date
{ 
public:
 void Init(int year, int month, int day)
 {
 _year = year;
 _month = month;
 _day = day;
 }
 void Print(Date* this)
 {
 cout <<this->_year<< "-" <<this->_month << "-"<<this-> _day <<endl;
 }

private:
 int _year;     // 年
 int _month;    // 月
 int _day;      // 日
};
int main()
{
 Date d1;
 d1.Init(2022,1,11);
 d1>printf();
 return 0;
}

三.总结

希望给大家带来一定的帮助,下节我会接着讲解关于类和对象---中阶的内容

感谢大佬们的支持。

相关推荐
Trouvaille ~5 分钟前
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
c++·c++20·编译原理·编译器·类和对象·rvo·nrvo
little redcap6 分钟前
第十九次CCF计算机软件能力认证-乔乔和牛牛逛超市
数据结构·c++·算法
wang_book11 分钟前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
AI原吾34 分钟前
掌握Python-uinput:打造你的输入设备控制大师
开发语言·python·apython-uinput
机器视觉知识推荐、就业指导34 分钟前
Qt/C++事件过滤器与控件响应重写的使用、场景的不同
开发语言·数据库·c++·qt
毕设木哥36 分钟前
25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】
开发语言·python·计算机·django·毕业设计·课程设计·毕设
珞瑜·36 分钟前
Matlab R2024B软件安装教程
开发语言·matlab
weixin_4554461737 分钟前
Python学习的主要知识框架
开发语言·python·学习
孤寂大仙v42 分钟前
【C++】STL----list常见用法
开发语言·c++·list
她似晚风般温柔7892 小时前
Uniapp + Vue3 + Vite +Uview + Pinia 分商家实现购物车功能(最新附源码保姆级)
开发语言·javascript·uni-app