【C++】类和对象(上篇)

2024-02-26 1411阅读

温馨提示:这篇文章已超过390天没有更新,请注意相关的内容是否还可用!

【C++】类和对象(上篇)

文章目录

  • 🛟一、面向过程和面向对象初步认识
  • 🛟二、类的引入
  • 🛟三、类的定义
    • 📝1、类的两种定义方式
    • 📝2、成员变量命名规则的建议
    • 🛟四、类的访问限定符及封装
      • 🍩1、访问限定符
      • 🍩2、封装
      • 🛟五、类的作用域
      • 🛟六、类的实例化
      • 🛟七、类对象模型
        • 🍟1、如何计算类对象的大小
        • 🍟2、结构体内存对齐规则
        • 🛟八、this指针
          • 🍔1、this指针的引出
          • 🍔2、this指针的特性

            【C++】类和对象(上篇)

            🛟一、面向过程和面向对象初步认识

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

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

            🌰比如:

            【C++】类和对象(上篇)

            【C++】类和对象(上篇)

            🛟二、类的引入

            C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。

            🌰举个栗子看一下:👇

            typedef int DataType;
            struct Stack
            {
            	void Init(size_t capacity)
            	{
            		_array = (DataType*)malloc(sizeof(DataType) * capacity);
            		if (nullptr == _array)
            		{
            			perror("malloc申请空间失败");
            			return;
            		}
            		_capacity = capacity;
            		_size = 0;
            	}
            	void Push(const DataType& data)
            	{
            		// 扩容
            		_array[_size] = data;
            		++_size;
            	}
            	DataType Top()
            	{
            		return _array[_size - 1];
            	}
            	void Destroy()
            	{
            		if (_array)
            		{
            			free(_array);
            			_array = nullptr;
            			_capacity = 0;
            			_size = 0;
            		}
            	}
            	DataType* _array;
            	size_t _capacity;
            	size_t _size;
            };
            int main()
            {
            	Stack s;
            	s.Init(10);
            	s.Push(1);
            	s.Push(2);
            	s.Push(3);
            	cout 
            	// 类体:由成员函数和成员变量组成
            };  // 一定要注意后面的分号
            
            public:
            	//打印基本信息
            	void Print()
            	{
            		cout _name 
            public:
            	//打印基本信息
            	void Print();
            	
            private:
            	char* _name;
            	char* _sex;
            	int age;
            }
            
            	cout _name 
            public:
            	void Init(int year)
            	{
            		// 这里的year到底是成员变量,还是函数形参?
            		year = year;
            	}
            private:
            	int year;
            };
            // 所以一般都建议这样
            class Date
            {
            public:
            	void Init(int year)
            	{
            		_year = year;
            	}
            private:
            	int _year;
            };
            // 或者这样
            class Date
            {
            public:
            	void Init(int year)
            	{
            		mYear = year;
            	}
            private:
            	int mYear;
            };
            
            public:
            	void PrintPersonInfo();
            private:
            	char _name[20];
            	char _gender[3];
            	int  _age;
            };
            // 这里需要指定PrintPersonInfo是属于Person这个类域
            void Person::PrintPersonInfo()
            {
            	cout 
            public:
            	void f1() {}
            private:
            	int _a;
            };
            // 类中仅有成员函数
            class A2 {
            public:
            	void f2() {}
            };
            // 类中什么都没有---空类
            class A3
            {};
            int main()
            {
            	cout 
            public:
            	void Init(int year, int month, int day)
            	{
            		_year = year;
            		_month = month;
            		_day = day;
            	}
            	
            	void Print()
            	{
            		cout 
            	Date d1, d2;
            	d1.Init(2022, 1, 11);
            	d2.Init(2022, 1, 12);
            	d1.Print();
            	d2.Print();
            	return 0;
            }
            
            public:
            	void PrintA()
            	{
            		cout 
            	A* p = nullptr;
            	p-PrintA();
            	return 0;
            }
            
            public:
            	void Show()
            	{
            		cout 
            	A* p = nullptr;
            	p-Show();
             
            	return 0;
            }
            
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]