C++之类的成员函数和构造函数
发布日期:2021-05-14 16:35:22 浏览次数:16 分类:精选文章

本文共 2883 字,大约阅读时间需要 9 分钟。

C++类成员函数与构造函数详解

在C++编程中,类的成员函数与构造函数是核心概念,掌握它们是开发高质量C++程序的基础。以下将从这两个方面展开详细讲解。

一、类的成员函数

1.1 函数声明

在类中定义成员函数的基本方式是用publicprotectedprivate修饰。函数的声明格式如下:

class 类名 {
修饰符1: 变量1类型 变量1名称;
变量2类型 变量2名称;
...
国家建: 函数1返回类型 函数1名称();
...
函数N返回类型 函数N名称();
}

例如:

class People {
public:
string name;
long score;
public:
void PlayGameScore();
}

1.2 函数定义

函数定义时需要用到class名::函数名{...}的语法结构。定义时需要包含函数的具体实现逻辑。例如:

void People::PlayGameScore() {
cout << score << endl;
}

二、构造函数

2.1 构造函数的特点

  • 构造函数的名称必须与类名相同。
  • 构造函数没有返回类型声明。

2.2 构造函数的作用

  • 初始化对象的数据成员。
  • 对于类对象的创建,编译器负责为对象分配内存空间并自动调用构造函数,从而完成成员变量的初始化。

2.3 构造函数的种类

  • 无参构造:没有接受参数的构造函数。

    • 若类中未定义任何构造函数,系统会自动生成默认的无参构造函数。
  • 一般构造函数(重载构造):接受多个参数的构造函数。

    • 需要根据具体需求重载不同的构造函数。
  • 拷贝构造函数:接受一个类对象的拷贝,完成对象的深拷贝。

    • 通常用于对象的深复制操作。

2.4 注意事项

  • 如果类中定义了构造函数,系统将不再自动生成默认构造函数。
  • 如果需要默认的无参构造函数(即方便的空构造),需手动声明。

2.5 常见用法

  • 一般用于初始化类对象的成员变量。
  • 构造函数可以是显式声明的,也可以是根据编译器默认生成的。

三、带参构造函数

3.1 定义带参构造函数

  • 带参构造函数的语法格式如下:
类名::构造函数名(参数类型1 参数1, 参数类型2 参数2, ..., 参数类型N 参数N) {
// 构造函数实现代码
}

例如:

Student::Student(string name, string desc) {
m_name = name;
m_desc = desc;
}

3.2 构造函数的调用

通过以下方式可以调用构造函数:

// 栈内构造
Student stu = Student("张三", "我要好好学习");
Student stu2(18);
// 堆内构造
Student* stu3 = new Student("李四", "好好学习");
stu3->ShowInfo();
delete stu3;

3.3 构造函数的重载

  • 构造函数的重载遵循与普通函数重载相同的规则,具体方式如下:
// 只重载选择性参数
Student stu4 = 50; // 调用的是 Student(int) 构造函数

示例

Student 类的定义

#include "Student.h"
#include
using namespace std;
class Student {
public:
// 默认构造函数
Student();
// 带参构造函数
Student(string name, string desc);
Student(int age); // 可以写成 Student(int)
virtual ~Student();
void ShowInfo();
string Getname() { return m_name; }
void Setname(string val) { m_name = val; }
string Getdesc() { return m_desc; }
void Setdesc(string val) { m_desc = val; }
int Getage() { return m_age; }
void Setage(int val) {
if (val < 0) {
m_age = 18;
} else {
m_age = val;
}
}
protected:
private:
string m_name;
string m_desc;
int m_age;
};

Student.cpp 中的实现

#include "Student.h"
#include
using namespace std;
Student::Student() {
cout << "默认构造" << endl;
}
Student::Student(string name, string desc) {
m_name = name;
m_desc = desc;
}

main.cpp 的主函数

#include "bits/stdc++.h"
#include "Student.h"
using namespace std;
int main() {
Student stu1; // 栈内构造
stu1.ShowInfo();
Student stu2("张三", "我要好好学习");
stu2.ShowInfo();
Student stu3(18);
stu3.ShowInfo();
Student stu4 = 50; // 调用 Student(int) 构造
stu4.ShowInfo();
Student* stu5 = new Student("李四", "好好学习");
stu5->ShowInfo();
delete stu5;
return 0;
}

输出结果

输出将包含以下信息:

  • 默认构造调用带参构造:Student(string name, string desc)调用带参构造:Student(int age)调用带参构造:Student(int age)
  • 我要好好学习张三调用函数:ShowInfo()
  • 好好学习李四调用函数:ShowInfo()

通过上述内容,可以看出构造函数在类程序设计中的重要性。理解和掌握构造函数的用法,可以极大提升你的C++编程能力。

上一篇:C++ 之析构函数
下一篇:C++ 之访问修饰符

发表评论

最新留言

很好
[***.229.124.182]2025年04月27日 16时30分01秒