美文网首页
C/C++基础知识(二)——类的构造

C/C++基础知识(二)——类的构造

作者: 王志强_9380 | 来源:发表于2019-10-12 17:11 被阅读0次

类的构造

.h的重复引入问题

创建一个.h文件(student.h)

#pragma once

这个代码的意思是防止重复引入.h文件,有的编译器不支持这个,所以我们可以使用#ifndef的方式来避免重复引入的问题

#pragma once
#ifndef  Student_H

#define Student_H
class Student {
}
#endif
构造函数和析构函数
class Student {
    int i;
public:
    Student();
    Student(int i);
    Student(int i, int j);
    ~Student();
private:
    int j;
};

创建student.cpp,实现构造方法

#include "student.h"
#include<iostream>
using namespace std;

Student::Student() {
    cout << "构造方法" << endl;
}

Student::Student(int a) :i(a) { //这种写法只能是构造函数
    cout << this->i << endl;
}

Student::Student(int i, int j) {
    this->i = i;
    cout << this->i << endl;
}

Student::~Student() {
    cout << "析构方法" << endl;
}

在main.cpp中调用构造方法

#include <iostream>
#include "Student.h"
int main()
{
    Student student;
    Student student1(55);
    Student student2(123, 234);
    std::cout << "hello world\n";
}

输出结果

构造方法
55
123
hello world
析构方法
析构方法
析构方法

注意

  • Student::Student(int a) :i(a)这种写法只能是构造函数中,普通函数会报错
  • public、private、protect等作用域是写在一块的,和java中不一样
常量函数

常量函数使用const修饰

student.h

class Student {
public:
    Student();
    ~Student();
    void setJ(int j);
    void setJ_const(int j) const;
private:
    int j;
};
student.cpp

void Student::setJ(int j) {
    this->j = j;
}

void Student::setJ_const(int j) const {
    //this->j = j; 
}

const修饰的函数不能够修改类的成员变量,只能够取值或者做一些逻辑判断

友元函数

如果在main.cpp中,想要修改Student类中的私有变量,普通的赋值是会报错的,这时候就可以使用友元函数
例:在main.cpp中定义一个方法

void frenedTest(Student* student) {
    student->j = 999;
}

会报错显示:变量不可访问,我们在Student中使用关键字friend定义一个友元函数

friend void frenedTest(Student*);

就可以访问私有变量了
如果有很多个方法要定义为友元函数,可以定义一个友元类

student.h

class Teacher
{
public:
    void call(Student* student) {
        student->j = 12345;
    }

    void call2(Student* student) {
        student->j = 67890;
    }
private:

};

然后Student类中声明该类为友元类

friend class Teacher;

然后就可以在main.cpp中访问到student的私有变量了

Teacher teacher;
teacher.call(&student);
teacher.call2(&student);

tips:

  • 代码补齐按enter立即补齐,工具 - >选项 - >文本编辑器 - > C / C ++ - >高级 里面的 "主动提交成员列表”选项,将其设置为True;
  • 控制台窗口一闪就没了,原因是建立工程时选用的是“空工程(Empty Project)”,而不是“Win32控制台程序(Win32 console application)”,项目”>"属性“>“配置属性”>“链接器”>“系统”>“子系统”,选择 控制台 (/SUBSYSTEM:CONSOLE),就可以了

相关文章

网友评论

      本文标题:C/C++基础知识(二)——类的构造

      本文链接:https://www.haomeiwen.com/subject/xodwpctx.html