C++学习笔记之类与对象详解

C++学习笔记之类与对象详解

1. 类与对象

在C++语言中,类是一种用户自定义的数据类型,它允许将数据和行为封装成一个对象,从而实现了面向对象的编程思想。而对象,则是类的具体化实例化。

1.1 类的定义

类的定义包含两个部分:类声明和类实现。

1.1.1 类的声明

类的声明通常在头文件中完成,它包含了类名、数据成员和成员函数的声明。

// 声明一个名为Person的类
class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi();

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

其中,publicprivateprotected 是用来修饰数据成员及成员函数在外部的可见性和访问权限。

1.1.2 类的实现

类的实现包含类成员函数的实现部分。通常在 .cpp 文件中实现成员函数,并在每个函数前添加类名和作用域解析符::

// 在 .cpp 文件中实现类的成员函数
Person::Person(string name, int age) {
    m_name = name;
    m_age = age;
}

void Person::sayHi() {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

1.2 对象的创建和使用

在类的定义完成后,我们可以通过创建对象的方式来使用类。在C++中,可以使用 new 关键字创建动态对象;或使用栈来创建一个局部变量的对象。

// 创建对象
Person person("Tom", 20);     // 在栈上创建对象
Person* pp = new Person("Bob", 25);  // 在堆上创建对象

// 使用对象调用成员函数
person.sayHi();
pp->sayHi();

// 释放动态创建的对象
delete pp;

2. 类的成员

类的成员包括数据成员和成员函数。

2.1 数据成员

数据成员是指在类中定义的变量。它们通常被私有化,在类的内部使用,并通过类的公有成员函数来访问。

class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi() const; // 使用const关键字确保函数不会修改类的数据成员
    void setName(string name);
    void setAge(int age);

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

// 在 .cpp 文件实现成员函数
void Person::setName(string name) {
    m_name = name;
}

void Person::setAge(int age) {
    m_age = age;
}

void Person::sayHi() const {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

2.2 成员函数

成员函数是指在类中定义的函数,它们可以访问类中的数据成员,以及其它成员函数。

class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi() const; // 使用const关键字确保函数不会修改类的数据成员
    void setName(string name);
    void setAge(int age);

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

// 在 .cpp 文件实现成员函数
void Person::setName(string name) {
    m_name = name;
}

void Person::setAge(int age) {
    m_age = age;
}

void Person::sayHi() const {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

示例说明

示例1:创建对象并调用成员函数

#include <iostream>
using namespace std;

class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi() const; // 使用const关键字确保函数不会修改类的数据成员
    void setName(string name);
    void setAge(int age);

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

// 实现构造函数
Person::Person(string name, int age) {
    m_name = name;
    m_age = age;
}

// 实现成员函数
void Person::setName(string name) {
    m_name = name;
}

void Person::setAge(int age) {
    m_age = age;
}

void Person::sayHi() const {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

int main() {
    // 创建对象并调用成员函数
    Person person("Tom", 20);
    person.sayHi();
    person.setName("Jack");
    person.setAge(25);
    person.sayHi();

    return 0;
}

输出结果:

Hi, my name is Tom, I'm 20 years old.
Hi, my name is Jack, I'm 25 years old.

示例2:动态创建对象并调用成员函数

#include <iostream>
using namespace std;

class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi() const; // 使用const关键字确保函数不会修改类的数据成员
    void setName(string name);
    void setAge(int age);

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

// 实现构造函数
Person::Person(string name, int age) {
    m_name = name;
    m_age = age;
}

// 实现成员函数
void Person::setName(string name) {
    m_name = name;
}

void Person::setAge(int age) {
    m_age = age;
}

void Person::sayHi() const {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

int main() {
    // 创建动态对象并调用成员函数
    Person* pp = new Person("Bob", 25);
    pp->sayHi();
    pp->setName("Alice");
    pp->setAge(30);
    pp->sayHi();

    // 释放动态对象
    delete pp;

    return 0;
}

输出结果:

Hi, my name is Bob, I'm 25 years old.
Hi, my name is Alice, I'm 30 years old.

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++学习笔记之类与对象详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 一步一步封装自己的HtmlHelper组件BootstrapHelper(二)

    我来为你详细讲解“一步一步封装自己的HtmlHelper组件BootstrapHelper(二)”的完整攻略。 标题 本攻略总共包含以下几个标题:- 引用相关类库- 封装组件方法- 示例1:使用BootstrapHelper生成表单- 示例2:使用BootstrapHelper生成面板 引用相关类库 在开始封装组件之前,我们需要引用Bootstrap相关类库…

    other 2023年6月25日
    00
  • iOS13.1正式版值得升级吗?iOS13.1正式版新特性与升降级全攻略

    iOS 13.1正式版值得升级吗? iOS 13.1正式版是苹果公司最新发布的操作系统版本。在决定是否升级之前,我们需要考虑以下几个因素: 1. 新特性 iOS 13.1带来了一些新的功能和改进,这些新特性可能会对你的使用体验产生积极影响。以下是一些值得注意的新特性: 暗黑模式:iOS 13.1引入了全新的暗黑模式,可以为你的设备提供更加舒适的视觉体验,并且…

    other 2023年8月3日
    00
  • #include 用法之我见

    Sprint Boot中的@EnableTransactionManagement 在Spring Boot中,@EnableTransactionManagement是一个注解,用于启用事务管理。本文将详细介绍@EnableTransactionManagement的作用和使用方法,包括示例说明。 @EnableTransactionManagement的…

    other 2023年5月5日
    00
  • java中synchronized的用法详解(四种用法)

    Java中synchronized的用法详解(四种用法) 在Java中,线程的同步性是非常重要的。在多线程编程的过程中,我们需要保证一些共享资源不会同时被多个线程修改或访问。这就需要使用Java的同步机制,其中最重要的就是synchronized。 synchronized关键字可以用于不同的用途,包括方法级别的同步、块级别的同步、静态方法级别的同步以及类级…

    其他 2023年3月28日
    00
  • C语言:min和max头文件

    以下是详细的“C语言:min和max头文件的完整攻略,过程中至少包含两条示例说明”。 问题描述 C语言中,我们经常需要比较两个数的大小,以进行相应的操作。min和max头文件提供了方便的方法来比较两个数的大小。本文将介绍如何使用min和max头文件,包括两个示例说明。 解决方法 在C语言中,我们可以使用以下步骤来使用min和max头文件比较两个数的大小: 在…

    other 2023年5月7日
    00
  • Android仿打开微信红包动画效果实现代码

    Android仿打开微信红包动画效果实现代码攻略 1. 实现红包动画效果的基本思路 要实现仿微信红包打开的动画效果,可以按照以下步骤进行: 创建一个包含红包图标的按钮或视图。 监听按钮的点击事件,在点击事件中执行以下操作: 将红包图标缩小至一个点,并隐藏原始红包图标。 创建一个新的视图,用于展示红包打开的动画效果。 在新的视图中实现红包打开的动画效果,例如旋…

    other 2023年9月7日
    00
  • Python实现单链表中元素的反转

    下面是Python实现单链表中元素反转的攻略。 1. 创建单链表 首先,我们需要定义单链表的结构。单链表可以通过定义一个节点类来实现,该类至少包含两个属性,一个是存储数据的值,一个是指向下一个节点的指针。具体实现如下: class ListNode: def __init__(self, val=0, next=None): self.val = val s…

    other 2023年6月27日
    00
  • docker-通过telnet连接到docker容器

    以下是关于“docker-通过telnet连接到docker容器”的完整攻略,包括定义、使用方法、示例说明和注意事项。 定义 Docker是一种容器化技术,可以将应用程序及其依项打包到一个可移植的容器中,以便在任何地方运行。在Docker中,可以通过telnet连接到容器,便在容器中执行命令或查看容器中的文件。 使用方法 使用telnet到Docker容器的…

    other 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部