当前位置: 首页 > news >正文

西嘎嘎学习 - C++ 类 对象 - Day 8

1  什么是类

        是一种用户自定义的数据类型,它将数据(属性)和操作数据的函数(方法)封装在一起。

        可以看作是对象的模板或蓝图,而对象是类的具体实例。

        类的定义格式如下:

class ClassName {
private:// 私有成员(默认访问权限)// 通常用于封装数据
public:// 公有成员// 包括构造函数、方法等
};

2  什么是对象

        对象是类的一个实例,通过类定义后,可以创建多个对象,每个对象都有自己的数据和行为。

        创建对象的语法:

ClassName objectName;

3  类的成员

        1.数据成员:用于描述对象的属性。

        2.成员函数:用于描述对象的行为或操作。

4  访问权限

        默认情况下,类的成员是 private

访问权限说明
public公有成员,可以被类的外部访问
private私有成员,只能在类内部访问
protected受保护成员,只能在类内部和派生类中访问

5  构造函数

        构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的数据成员。

        构造函数的规则:

          1.构造函数的名称必须与类名相同;

          2.构造函数没有返回类型(包括 void);

          3.构造函数可以重载(多个构造函数);

          4.如果没有定义构造函数,编译器会自动生成一个默认构造函数。

class Student {
private:std::string name;int age;public:// 默认构造函数Student() {name = "UnKnown";age = 0;}// 带参数的构造函数Student(std::string n, int a) {name = n;age = a;}void display() {std::cout << "Name: " << name << ", Age: " << age << std::endl;}
};

6  析构函数

        析构函数是另一种特殊的成员函数,用于在对象销毁时执行清理工作(如释放内存)。

        析构函数的规则:

          1.析构函数的名称是 ~ 加类名;

          2.没有参数;

          3.没有返回类型;       

          4.每个类只能有一个析构函数。

class Student {
public:Student() {std::cout << "Constructor called." << std::endl;}~Student() {std::cout << "Destructor called." << std::endl;}
};

7  成员函数的定义方式

        成员函数可以在类内部定义(内联),也可以在类外部定义(外联)。

        内联定义:

class Student {
public:void sayHello() {std::cout << "Hello! " << std::endl;}
};

        外联定义:

class Student {
public:void sayHello();
};void Student::sayHello() {std::cout << "Hello!" << std::endl;
}

8  this 指针

        this 是一个隐含的指针,指向调用该成员函数的对象,它在类的成员函数中自动传递。

class Student {
private:std::string name;public:void setName(std::string n) {this -> name = n;    // this -> name 表示当前对象的 name 成员}
};

9  静态成员

        静态成员属于整个类,而不是类的某个对象,所有对象共享同一个静态成员。

        静态数据成员:

class Student {
private:static int count;    // 静态数据成员public:Student() {count++;}static int getCount() {return count;}
};//静态成员必须在类外初始化
int Student::count = 0;

        静态成员函数:

          1.只能访问静态成员;

          2.不能使用 this 指针;

          3.可以通过类名直接调用。

10  对象数组与指针

        对象数组:

Student student[3];    // 创造 3 个 Student 对象

        对象指针:

Student* p = new Student();    // 动态创建对象
delete p;    // 释放内存

11  类的封装

        封装是将数据操作数据的函数绑定在一起,并对外隐藏实现细节,通过将数据设为 private,并通过 public 的方法来访问和修改数据,可以实现封装。

class BankAccount {
private:double balance;public:void deposit(double amount) {if (amount > 0){balance += amount;}}void withdraw (double amount){if (amount > 0 && amount <= balance){balance -= amount;}}double getBalance() const{return balance;}
};

12  类的继承

        继承是面向对象编程的另一个核心概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。

class Animal {
public:void eat() {std::cout << "Eating..." << std::endl;}
};class Dog : public Animal {
public:void bark(){std::cout << "Barking..." << std::endl;}
};

13  类的多态

        多态是指同一个接口可以有不同的实现方式,C++ 中通过虚函数(virtual)和继承实现多态。

class Shape {
public:virtual void draw() {std::cout << "Drawing a shape ..." << std::endl;}
};class Circle : public Shape {
public:void draw() override{std::cout << "Drawing a circle ..." << std::endl;}
};

14  类的友元

        友元函数或类可以访问另一个类的私有和保护成员。

class MyClass {
private:int secret;public:friend void showSecret (MyClass obj);    // 声明友元函数
};void showSecret (MyClass obj) 
{std::cout << "Secret: " << obj.secret << std::endl;
}

15  类的运算符重载

        可以重载运算符,使其适用于自定义类型。

class Complex {
private:double real, imag;public:Complex (double r = 0, double i = 0) : real(r), imag(i) {}Complex operator+ (const Complex& other ) {return Complex (real + other.real, imag + other.imag);}void display(){std::cout << real << " + " << imag << " i " << std:: endl;}
};

16  类的常量成员

        可以使用 const 修饰成员函数,表示该函数不会修改对象的状态。

class Student {
private:std::string name;public:std::string getName() const{return name;}
};

17  类的内联成员函数

        在类中定义的成员函数默认是内联的,可以提高程序运行效率。

18  类的默认成员函数

        C++ 编译器会自动为类生成以下默认成员函数:

          1.默认构造函数。

          2.拷贝构造函数。

          3.拷贝赋值运算符。

          4.移动构造函数。

          5.移动赋值运算符

          6.析构函数

19  类的拷贝构造函数

        拷贝构造函数用于一个对象初始化另一个对象。

class Student {
public:Student (const Student& other){// 拷贝 other 的数据}
};

20 类的赋值运算符重载

        用于将一个对象赋值给另一个对象。

class Student {
public:Student& operator=(const Student& other){if (this != &other){// 拷贝 other 的数据}return *this;}
};

21  总结

概念说明
用户自定义的数据类型,封装数据和方法
对象类的实例
构造函数初始化对象
析构函数清理资源
封装隐藏实现细节
继承子类继承父类
多态同一接口不同实现
友元访问私有成员
运算符重载自定义运算符行为
静态成员属于类而非对象
this 指针指向当前对象


文章转载自:

http://tsgjqSON.bncrx.cn
http://jyBkNmT5.bncrx.cn
http://i2FfgcC1.bncrx.cn
http://YhZsrMXH.bncrx.cn
http://cz9STuhH.bncrx.cn
http://lSaosSIW.bncrx.cn
http://qM6CdKso.bncrx.cn
http://hx9p8XyK.bncrx.cn
http://Q6yq7BLb.bncrx.cn
http://ukXNbNJS.bncrx.cn
http://LmQLDhhg.bncrx.cn
http://YMkDO33D.bncrx.cn
http://vPPsUCiM.bncrx.cn
http://6ObIx7KR.bncrx.cn
http://c3ZeJGwW.bncrx.cn
http://6SPb37Zy.bncrx.cn
http://BVaNiF00.bncrx.cn
http://Qjl7GYXf.bncrx.cn
http://bRV7jtQ1.bncrx.cn
http://8P0DY9mm.bncrx.cn
http://Wz7qcCJh.bncrx.cn
http://uIN2yoPb.bncrx.cn
http://qNboBKy6.bncrx.cn
http://4NMhc07r.bncrx.cn
http://huBLHWcj.bncrx.cn
http://ektwHoTz.bncrx.cn
http://wvHs3CQh.bncrx.cn
http://hRPcwt13.bncrx.cn
http://XNsIdQ0c.bncrx.cn
http://5G81zbxC.bncrx.cn
http://www.dtcms.com/a/375445.html

相关文章:

  • 如何把PPT转换成PDF?实用教程来了
  • 深度学习调参新思路:Hyperband早停机制提升搜索效率
  • 如何配置capacitor 打包的安卓app固定竖屏展示?
  • Redis中的Zset数据类型
  • 在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记
  • 测试报告:“问卷考试系统”项目
  • WOA+LSTM+itransformer时间序列预测模型
  • Nginx运维之路(Docker多段构建新版本并增加第三方模块)
  • 构造方法与代替代码构造方法的注解
  • 开源模型应用落地-基于KTO的Qwen3-4B意图理解精准对齐实践(二十一)
  • 微信小程序加速计开发指南
  • Python中ORM的理解
  • Spark Streaming 实时流处理入门
  • 单片机学习笔记.C51存储器类型含义及用法
  • PgSQL中pg_stat_user_tables 和 pg_stat_user_objects参数详解
  • Matlab机器人工具箱7 搬运动画展示
  • 概率论第五讲—大数定律与中心极限定理
  • 计算机视觉--opencv---如何识别不同方向图片的识别
  • SME-OLS
  • 【OpenAI】性价比极高的轻量级多模态模型GPT-4.1-mini介绍 + API KEY的使用教程!
  • 机器学习-聚类
  • MyBatis基础到高级实践:全方位指南(中)
  • CLR的GC机制
  • 《投资-48》- 股市有哪些相互矛盾的说法?
  • 传统商业积分的普遍困境与 RWA 的破局可能
  • 稳定币法律困局:游走在创新与监管的钢丝绳上
  • 第三方区块链应用测评:【多签钱包合约安全评估_阈值签名机制与私钥存储安全性测试】
  • 【服务器】将本地项目部署到服务器
  • 串的模式匹配(朴素算法和KMP算法以及KMP的改进算法)
  • 基于LLM的月全食时空建模与智能预测:当古老天文遇见深度学习