C++学习之旅: 第10章

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DHGhh/article/details/85559889

定义类,类规范由两部分类声明和类定义两部分组成。一般情况下,类的声明定义放在头文件中,类的实现(类方法的代码)是放在源代码文件中。

  • 类声明:已数据成员的方式描述数据部分,已成员函数(即方法)描述公有接口

  • 类定义:描述如何实现成员函数

基础知识

  1. 成员函数可在在类声明中就地定义(此时该函数就成为内联函数),也可以使用原型声明。内联函数也可以在类外部实现,内联函数比较特殊,需要在每个使用到它的文件都对其定义,所以为了确保内联定义多文件程序的所有程序有效,所以内联函数要放在头文件中。类的内联函数定义如下:
inline type className::method(args) {
    //实现
}
  1. 关键字privatepublicprotected是新的,描述了类成员的访问控制。如果不声明的话,默认为private。通常,成员数据放在private中,类的成员函数放在public中。
  2. 实现类成员方法,需要使用类作用域运算符::来标志标志函数所属的类,且类方法可以访问private组件。类函数实现如下:
type className::method(args) {
    //实现
}
  1. 每一个对象都有自己的存储空间,用于存储内部变量和类成员,但同一个类创建的所有对象都共享同一个方法。
  2. 类的构造方法。类都有一个默认的构造方法,构造方法的名字和类名一样,且没有返回值。需要注意以下几点:
    • 类的构造函数的参数名不能和类成员一样。
    • 不能使用使用对象调用构造函数。
    • 如果类定义了构造函数,但又想使用默认的构造函数,则必须为类提供默认构造函数
  3. 创建对象会调用构造函数,调用构造函数方式有三种。
    • 方式一,显式使用:Student student = Student("hbx", 24);
    • 方式二,隐式使用:Student student("hbx", 24);
    • 方式三,New构造:Student student = new Student("hbx", 24);
  4. 析构函数。当对象过期时,程序将自动调用析构函数,我们可以在析构函数中释放资源。例如,我们在构造函数中使用New操作符分配了内存,则应该在析构函数中使用delete操作符释放资源。析构函数实现如下:
    ~className{
        //释放资源等操作
    }
  1. 当对象或对象指针声明为const时,调用的函数也需要声明为const, 否则调用失败。这样做是为了避免调用函数时,函数会修改常量对象。只要类方法不修改调用对象,就应该将其声明为constconst函数声明方式如下:
   type className::method(args) const
  1. this指针。this指针用于指向正在调用方法的对象。

实例

如Student类的头文件Student.h:

    //Student.h
    #ifndef STUDENT_H
    #define STUDENT_H
    #include "string"
    class Student{
        private:
        std::string mName;
        int mAge;
        public:
        Student(Student &);
        Student(std::string name="hbx", int age=24);
        int getAge(){
            return mAge;
        };
        std::string getName(){
            return mName;
        }
    };
    #endif

Student类的实现文件Student.cpp:

//Student.cpp
#include "Student.h"
#include "string"

Student::Student(std::string name, int age) : mName(name), mAge(age) {}

Student::Student(Student & student){
    mName = student.mName;
    mAge = student.mAge;
}

猜你喜欢

转载自blog.csdn.net/DHGhh/article/details/85559889