C++ 类和对象(A)

07-16 1280阅读

文章目录

  • 一、类与对象的初步认识
  • 二、类的定义
    • 1、类定义格式
    • 2、访问限定符
    • 3、类域
    • 一、实例化
      • 1、实例化概念
      • 2、对象大小
      • 3、内存对齐规则
      • 三、this指针

        一、类与对象的初步认识

        1.类是对象的抽象,而对象是类的具体实例。

        类是抽象的,不占用内存;而对象是具体的,占用存储空间。

        C++ 类和对象(A)

        2.面向过程与面向对象

        C语言是面向过程的,关注的是过程中的数据与方法。

        C++是面向对象的,关注的是对象’的属性与功能。

        二、类的定义

        1、类定义格式

        1.class为定义类的关键字,Text为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。

        2.为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或者后面加_ 或者 m开头,注意C++中这个并不是强制的,只是一些惯例。

        3.C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是struct中可以定义函数,一般情况下我们还是推荐用class定义类。

        4.定义在类里面的成员函数默认为inline。

        #include
        using namespace std;
        class Text
        {
        public:
        	void Print()
        	{
        		n = 1;
        		cout 
        	_year = year;
        	_month = month;
        	_day = day;
        	}
        private:
        	int n;
        	// 为了区分成员变量,⼀般习惯上成员变量
        	// 会加⼀个特殊标识,如_ 或者 m开头
        	int _year;  // year_ m_year
        	int _month;
        	int _day;
        };
        int main()
        {
        	Text d;
        	d.Init(2024, 3, 31);
        	d.Print();
        	return 0;
        }
        
        	struct ListNodeC* next;
        	int val;
        }LTNode;
        // 不再需要typedef,ListNodeCPP就可以代表类型
        struct ListNodeCPP
        {
        	void Init(int x)
        	{
        		next = nullptr;
        		val = x;
        	} 
        	ListNodeCPP* next;
        	int val;
        };
        int main()
        {
        	return 0;
        }
         
        public:
        	// 成员函数
        	void Init(int n = 4);
        private:
        	// 成员变量
        	int* array;
        	size_t capacity;
        	size_t top;
        };
        // 声明和定义分离,需要指定类域
        void Stack::Init(int n)
        {
        	array = (int*)malloc(sizeof(int) * n);
        	if (nullptr == array)
        	{
        	perror("malloc申请空间失败");
        	return;
        	} 
        	capacity = n;
        	top = 0;
        } 
        int main()
        {
        	Stack st;
        	st.Init();
        	return 0;
        }
         
        public:
        	void Init(int year, int month, int day)
        	{
        	_year = year;
        	_month = month;
        	_day = day;
        	} 
        	void Print()
        	{
        	cout 
        	// Date类实例化出对象d1和d2
        	Date d1;
        	Date d2;
        	d1.Init(2024, 3, 31);
        	d1.Print();
        	d2.Init(2024, 7, 5);
        	d2.Print();
        	return 0;
        }
         
        public:
        	// void Init(Date* const this, int year, int month, int day)
        	void Init(int year, int month, int day)
        	{
        		// 编译报错:error C2106: “=”: 左操作数必须为左值
        		// this = nullptr;
        		// this-_year = year;
        		_year = year;
        		this-_month = month;
        		this-_day = day;
        	} 
        	void Print()
        	{
        		cout 
        	// Date类实例化出对象d1和d2
        	Date d1;
        	Date d2;
        	// d1.Init(&d1, 2024, 3, 31);
        	d1.Init(2024, 3, 31);
        	d1.Print();
        	d2.Init(2024, 7, 5);
        	d2.Print();
        	return 0;
        }
        

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]