首页 > 编程语言 >C++ OOP(1)

C++ OOP(1)

时间:2023-10-08 19:35:12浏览次数:37  
标签:int C++ num OOP MyClass include public 构造函数

目录

类声明

class ClassName{
	private:
   		// data member declarations;
    public:
    	// member funtion declarations;
};

成员函数

一般定义成员函数的方式是在类外,通过域解析运算符指定成员函数属于哪个类

#include <iostream>
#include <string>
using namespace std;

class MyClass{
    private:
        int my_num;
    public:
        void my_func();		//注意此处为成员函数声明,不带花括号{}
};

class YouClass{
    private:
        int you_num;
    public:
        void you_func();
};

void MyClass::my_func(){
    cout << "my function" << "\n";
}

void YouClass::you_func(){
    cout << "you function" << "\n";
}

int main(){
    MyClass mycls;
    YouClass youcls;
    mycls.my_func();
    youcls.you_func();
    return 0;
}

类声明和成员函数都完成之后,就可以使用ClassName obj这样的方式创建对象,并使用obj.member_func()这样的方式访问公共的成员,如上代码所示

构造函数和析构函数

构造函数:用于在创建对象时初始化一些成员变量

成员名和构造函数参数名

如果成员名和构造函数参数名同名,就会出现x = x这样的代码,这是错误的,一般类成员名前加上m_前缀

使用构造函数

显式调用/隐式调用

默认构造函数

用户没有定义特定的构造函数会存在一个默认构造函数,而定义过特定的构造函数之后,就没有默认构造函数了,此时再不初始化创建对象就会报错。一般对每个类都要显示定义一个默认构造函数,防止报错。

#include <iostream>
#include <string>
using namespace std;

class MyClass{
    private:
        int m_num;
    public:
        MyClass();
        MyClass(int num){
            cout << "call constructor" << "\n";
            m_num = num;
        }

        int getNum(){
            return m_num;
        }
};


int main(){
    MyClass mycls0;     //调用默认构造函数
    MyClass mycls1 = MyClass(10);   //显示调用构造函数
    MyClass mycls2(20);             //隐式调用
    cout << mycls1.getNum() << "\n";    
    cout << mycls2.getNum() << "\n";
    return 0;
}

析构函数

在对象使用结束之后完成清理工作,通常不显示调用析构函数

class MyClass{
	public:
    	MyClass();
    	~MyClass();
};

文件组织

  • MyClass.h

    MyClass类的声明

  • MyClass.cpp

    MyClass类方法实现

  • test.cpp

    使用MyClass

MyClass.h

#include <string>
using namespace std;

class MyClass{
    private:
        int m_num;
        string m_str;
    
    public:
        MyClass();
        MyClass(int num, string str);
        ~MyClass();
        void set_num(int num);
        void set_str(string str);
        int get_num();
        string get_str();

};

MyClass.cpp

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

MyClass::MyClass(){
    cout << "call default constructor" << "\n";
}

MyClass::MyClass(int num, string str){
    cout << "call my constructor" << "\n";
    m_num = num;
    m_str = str;
}

MyClass::~MyClass(){
    cout << "call destuctor" << "\n";
}

void MyClass::set_num(int num){
    m_num = num;
}

void MyClass::set_str(string str){
    m_str = str;
}

int MyClass::get_num(){
    return m_num;
}

string MyClass::get_str(){
    return m_str;
}

test.cpp

#include <iostream>
#include <string>
#include "MyClass.h"

int main(){
    MyClass obj1 = MyClass(1, "dctwan");
    MyClass obj2;
    
    obj2.set_num(2);
    obj2.set_str("hhhhh");
    cout << obj1.get_num() << obj1.get_str() << "\n";
    cout << obj2.get_num() << obj2.get_str() << "\n";

    return 0;
}

编译运行

g++ MyClass.cpp test.cpp
./a.out

this指针

作用一

类中的特殊指针,指向当前对象的实例,使用 this 指针,我们可以在成员函数中访问当前对象的成员变量,即使它们与函数参数或局部变量同名,这样可以避免命名冲突,并确保我们访问的是正确的变量

#include <iostream>
using namespace std;

class MyClass{
    private:
        int i;
        int num;
    public:
        MyClass(int i, int num){
            this->i = i;
            this->num = num;
        }

        void prin_info(){
            int i, num = 0;
            for(i = 0; i < 3; ++i){
                cout << this->i << " ";
            }
            cout << "\n class.num: " << this->num << ", func num: " << num << "\n"; 
        }
};

int main(){
    MyClass obj = MyClass(10, 1);
    obj.prin_info();
    return 0;
}

作用二

成员函数可能要处理2个对象,需要使用this指针

#include <iostream>
using namespace std;

//比较长方体的体积
class Box{
    private:
        double l, w, h;    //长,宽,高

    public:
        Box(double l, double w, double h){
            this->l = l;
            this->w = w;
            this->h = h;
        }

        double get_volume(){
            return this->l * this->w * this->h;
        }
        
        int compare(Box box){
            return this->get_volume() > box.get_volume();
        }
};


int main(){
    Box a = Box(2, 5, 4);
    Box b = Box(2, 1, 1);
    cout << a.compare(b) << "\n";
    return 0;
}

标签:int,C++,num,OOP,MyClass,include,public,构造函数
From: https://www.cnblogs.com/dctwan/p/17749954.html

相关文章

  • Loopback初识
    一些好的文章~loopback(回环)-流水灯-博客园(cnblogs.com)Loopback接口的作用-konglingbin-博客园(cnblogs.com)Loopback接口的主要作用及Loopback端口配置_loopback地址作用-CSDN博客......
  • C++接口自动注册
    #include<iostream>#include<memory>template<typenameT>classInterface{public:staticInterface&instance(){staticInterfaceinst;returninst;}staticvoidreg(T*impl){instance().m_im......
  • hadoop集群搭建及编程实践
    Hadoop集群搭建前期准备及JDK,hadoop安装设置主机名和添加主机映射验证连通性SSH无密码登录配置集群/分布式环境修改workers修改文件core-site.xml修改hdfs-site.xml修改mapred-site.xml修改yarn-site.xml分发到其他结点格式化namenode执行分布式实例javaAPI与H......
  • Hadoop问题解决(3)
    在启动hadoop过程中,出现如下错误:192.168.10.100:Invalidmaximumheapsize:-Xmx0m192.168.10.100:CouldnotcreatetheJavavirtualmachine.192.168.10.100:jobtracker已死,但pid文件仍存此时查看jobtracker的日志,1[root@ccloud100manager]#vim/var/log/hado......
  • hadoop问题解决(4)
    默认配置是将datanode,namenode,jobtracker,tasktracker,secondarynamenode的pid存放在/tmp目录下,随着linux的定期清理,这些pid就不见了,当然就无法停止了,怎么解决呢?在/tmp目录创建或者修改hadoop-hadoop用户名-datanode.pid 里面写入对应的pid, 可通过jps查看. namen......
  • c++如何读取txt文件内容
    一、c++文件流:fstream //文件流ifstream //输入文件流ofstream //输出文件流 二、文件路径的表示1、绝对路径:inf.open("d://DEV_C++//LogFile//游泳数据//LUYINGYAN1039_SensorLog.txt");   注意:双斜线"\\" 2、相对路径:对相对路径而言,路......
  • DEV_C++新建项目及多线程实现
    一、单个C++程序(多线程)//实现txt文件的读入并重写入另外一个txt文件中~#include<fstream>//ifstream#include<iostream>#include<string>//包含getline()#include<string.h>#include<pthread.h>#include<windows.h>//#include<cmath>usin......
  • 基于 Linux、C++实现的高性能内存池
    1.引入内存池的意义  内存池(MemoryPool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocksallocation)。通常我们习惯直接使用new、malloc等API申请分配内存,但是这种方式非常容易产生内存碎片,早晚都会申请内存失败。并且在比较复杂的代码或者继承的屎山......
  • 如何使用Visual Studio Code运行C/C++程序
    与VisualStudio2008/2010…集成开发工具不同,VisualStudioCode只是一个代码编辑器。在Windows环境下,需下载安装C/C++编译器,配置环境等,VSCode才可以编译代码和运行程序。1.下载安装编译器MinGW(Minimalist GNUfor Windows),又称mingw32,是一种编译器,可以用来编译和运行C语言......
  • C++ Benchmark tool library
     C++Benchmarktoollibrary存在哪些c++Benchmark库呢,通过google搜索和github搜索,列出如下Benchmarklibrary名称 简介 源码地址google/benchmark Amicrobenchmarksupportlibrary https://github.com/google/benchmarkCelero C++BenchmarkAuthoringLibrary/Framework......