c++类中的封装,信息隐藏,多文件结构

//student,h
#ifndef STUDENT_H
#define STUDENT_H

class student
{
    public:
        void display()
        {
            cout<<"num:"<<num<<endl;
            cout<<"name:"<<name<<endl;
            cout<<"sex:"<<sex<<endl;
        }
        void set_value();
    private:
        int num;
        string name;
        char sex;
};

#endif

//student.cppp
#include "student.h"
void student::set_value()
{
    int n
    string na;
    char s;
    num=n;
    strcpy(name,na);
    strcpy(sex,s);
}
//main.cpp
#include<iostream>
using namespace std;
#include "student.h"
int main()
{
    student stu(98,zhangming,man);
    cout<< stu.display()<<endl;
    return 0;
}

用devc++编译的,新建里面是创建的类,想定义头文件,包含成员函数定义的源文件和包含主函数的源文件,为什么编译之后显示源文件未编译。谢谢大家

在你提供的代码中,有一些错误导致编译无法成功。以下是修复后的代码示例:

// student.h
#ifndef STUDENT_H
#define STUDENT_H
 
#include <iostream>
#include <string>

class Student
{
public:
    void display();
    void set_value(int n, const std::string& na, char s);
 
private:
    int num;
    std::string name;
    char sex;
};
 
#endif

// student.cpp
#include "student.h"

void Student::display()
{
    std::cout << "num: " << num << std::endl;
    std::cout << "name: " << name << std::endl;
    std::cout << "sex: " << sex << std::endl;
}

void Student::set_value(int n, const std::string& na, char s)
{
    num = n;
    name = na;
    sex = s;
}

// main.cpp
#include <iostream>
#include "student.h"

int main()
{
    Student stu;
    stu.set_value(98, "zhangming", 'm');
    stu.display();

    return 0;
}

修复后的代码中,我进行了以下更改:

  • 将类名 student 改为 Student,按照惯例类名应使用大写字母开头。
  • student.h 头文件中添加了必要的头文件引用,如 <iostream><string>
  • 修改了 set_value 函数的参数类型和参数传递方式,使其能正确接收参数。
  • main.cpp 中创建了 Student 对象 stu,并调用了相应的函数。

请确保以上代码按照正确的方式保存,并使用 Dev-C++ 编译器进行编译。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7521226
  • 这篇博客你也可以参考下:【参考其他文章修改】DevC++使用调试的方法(可以不是项目,单个代码亲测可行)
  • 除此之外, 这篇博客: 使用DevC++过程中尝试设置断点逐步调试程序时控制台窗口闪退的问题的解决方法中的 解决步骤: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1、在DevC++的主界面上方找到工具(T)选项卡,如下图所示:
    在这里插入图片描述
    2、点击工具选项卡,选择编译选项,如图所示:
    在这里插入图片描述
    3、在新打开的编译器选项的窗口中,选择代码生成/优化、连接器标签,可以看到产生调试信息一栏为NO,将其改为YES再保存即可。如图所示:
    在这里插入图片描述
    可以看到,在单步调试的时候产生的控制台窗口闪退的问题就是因为没有打开产生调试信息的选项而造成的,打开就好。

  • 以下回答由chatgpt基于相关博客总结生成:

    对于封装和信息隐藏,可以通过将数据成员和成员函数设置为private,在类的外部无法直接访问和修改,需要通过公共成员函数来实现。示例代码如下:

    class MyClass {
    private:
        int data;
        void privateFunc() {
            // do something
        }
    public:
        void setData(int newData) {
            data = newData;
        }
        int getData() const {
            return data;
        }
        void publicFunc() {
            // do something
        }
    };
    

    对于多文件结构,可以将类的声明放在头文件中,成员函数的定义作为另一个源文件,主函数的源文件中包含头文件即可。示例代码如下:

    MyClass.h:

    class MyClass {
    private:
        int data;
        void privateFunc();
    public:
        void setData(int newData);
        int getData() const;
        void publicFunc();
    };
    

    MyClass.cpp:

    #include "MyClass.h"
    
    void MyClass::setData(int newData) {
        data = newData;
    }
    
    int MyClass::getData() const {
        return data;
    }
    
    void MyClass::privateFunc() {
        // do something
    }
    
    void MyClass::publicFunc() {
        // do something
    }
    

    main.cpp:

    #include "MyClass.h"
    
    int main() {
        MyClass obj;
        obj.setData(10);
        int result = obj.getData();
        obj.publicFunc();
        return 0;
    }
    

    对于源文件未编译的问题,需要在编译器中设置确保所有源文件都被编译。可以检查编译器的设置,确保产生调试信息选项已经设置为yes。如果仍然存在问题,可能是由于编译器版本过旧或不兼容,需要更新或更换编译器。