C++ 继承,构造函数,析构函数(上)

简介: C++ 继承,构造函数,析构函数

在上一章节中,我们讲解了封装,类,this指针,这一章节我们来讲解继承,多层继承,多重继承,构造函数和析构函数。

一.构造函数

构造函数时类的特殊成员函数,通常用于初始化对象。构造函数在创建对象时由编译器自动调用。C++中的每个类至少要有一个构造函数,如果类中没有定义构造函数,编译器会默认提供一个无参构造函数,默认的无参构造函数体也为空,不具有初始化意义。因此,在C++程序中要显示定义构造函数。

构造函数的定义

构造函数是类的特殊成员函数,C++编译器严格规定了构造函数的接口形式,其定义格式如下图所示:

class 类名{
权限控制符:
  构造函数名(参数列表){
    函数体
  }
  ...
}

关于构造函数定义格式的说明,具体如下:

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

2.构造函数名的前面不需要设置返回值类型

3.构造函数中无返回值,不能使用return返回

4.构造函数的成员权限一般设置为public

接下来我们根据具体的例子来为大家讲解:

<1>.无参构造函数
#include <stdio.h>
struct Student{
  int a;
  int b;
  Student(){
  }
  Student(int c,int d){
    a = c;
    b = d;
  }
}; 
void Test(){
  Student s1;
}
int main(){
  Test;
  return 0;
}

我们先来看这个无参构造函数,其作用相当于创建一个类的对象,没有赋初值。相当于C语言中的struct 函数题名 函数体变量

<2>.有参构造函数

接下来我们来看看有参数的构造函数:

#include <stdio.h>
struct Student{
  int a;
  int b;
  Student(int c,int d){
    a = c;
    b = d;
  }
}; 
void Test(){
  Student s1(1,2);
  printf("%d %d",s1.a,s1.b);
}
int main(){
  Test();
  return 0;
}

我们可以看到程序输出窗口输出了1和2,分别为s1中a的值和b的值。

那么我们就知道,带参数的构造函数完成了创建类的对象并且初始化对象。其作用相当于C语言中Student s1;s1.a=1;s1.b=2;

<3>.重载构造函数

我们在使用类的时候,有时候需要初始化对象,有时候不需要初始化对象,那么构造函数如何完成呢?我们可以用到函数重载:

struct Student{
  int a;
  int b;
  Student(){
  }
  Student(int c,int d){
    a = c;
    b = d;
  }
};

我们可以像这样定义类,当我们不需要初始化对象的时候,我们可以这样写:

Student s1;

当我们需要初始化对象的时候,我们就可以传入参数:

Student s1(1,2);

这样我们就可以将对象初始化了,使用起来非常方便。

相关文章
|
3月前
|
编译器 C++
【C++】详解C++的继承
【C++】详解C++的继承
|
14天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
59 30
|
3天前
|
C++
c++继承层次结构实践
这篇文章通过多个示例代码,讲解了C++中继承层次结构的实践应用,包括多态、抽象类引用、基类调用派生类函数,以及基类指针引用派生类对象的情况,并提供了相关的参考链接。
|
28天前
|
C++
C++(二十)继承
本文介绍了C++中的继承特性,包括公有、保护和私有继承,并解释了虚继承的作用。通过示例展示了派生类如何从基类继承属性和方法,并保持自身的独特性。此外,还详细说明了派生类构造函数的语法格式及构造顺序,提供了具体的代码示例帮助理解。
|
2月前
|
编译器 C++
C++的基类和派生类构造函数
基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。 在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数完成,但是大部分基类都有 private 属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化。 这种矛盾在C++继承中是普遍存在的,解决这个问题的思路是:在派生类的构造函数中调用基类的构造函数。 下面的例子展示了如何在派生类的构造函数中调用基类的构造函数:
32 1
|
2月前
|
安全 Java 编译器
|
3月前
|
存储 Java 程序员
【c++】继承深度解剖
【c++】继承深度解剖
29 1
|
3月前
|
存储 编译器 数据安全/隐私保护
|
3月前
|
Java C++ 运维
开发与运维函数问题之C++中有哪些继承方式如何解决
开发与运维函数问题之C++中有哪些继承方式如何解决
24 0
|
3月前
|
存储 编译器 C++
C++基础知识(六:继承)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。