c++ 调用另外一个类的方法_linux如何在一个c++项目中调用另一个c++项目中的函数 - CSDN
  • 在继承之外,在C++中一个成员函数调用一个类成员的方法主要有:的组合,友元的前向声明,单例模式等,下面主要讲讲这4种方法的实现 方法1:利用的组合 组合通俗来讲就是B有A的属性,如声明一个...

    在继承之外,在C++中一个类成员函数调用另一个类成员的方法主要有:类的组合,友元类,类的前向声明,单例模式等,下面主要讲讲这4种方法的实现

    方法1:利用类的组合

    组合通俗来讲就是类B有类A的属性,如声明一个Person类,再声明一个Teacher类,Person类对象有年龄和姓名成员,而Teacher类对象成员也有年龄和姓名属性,所以我们可以将类Person的对象作为类Teacher的成员变量,那么就实现了Teacher类对象也有这两个属性。如下所示:

    #include<iostream>
    #include<string>
    using namespace std;
    
    class Person
    {
      public:
    	  Person(int _age, string _name) :age(_age), name(_name) {}
    	  ~Person() {};
    	void print() 
    	{
    		cout << name<<"	" << age  << endl;
    	}
    	private:
    		int age;
    	   string name;
    };
    class Teacher
    {
    public:
    	Teacher(Person* _person) :person(_person) {}
    	~Teacher() {};
    	void print()
    	{
    		this->person->print();
    	}
    	private:
    		Person* person;
    		
    };
    
    int main()
    {
    	Person p(40, "lisan");
    	Teacher teacher(&p);
    	teacher.print();
    	system("pause");
    	return 0;
    }
    

    方法2:友元类

    友元类就是在类A中声明一个类B,那么就称类B是类A的友元类,这时类B的对象可以访问类A的一切成员,包括私有成员。如下所示:

    #include<iostream>
    #include<string>
    using namespace std;
    
    class A
    {
    public:
    	friend class B;
    	A(int _age, string _name) :age(_age), name(_name) {}
    	~A() {};
    	void print_a()
    	{
    		cout << name << "	" << age << endl;
    	}
    private:
    	int age;
    	string name;
    };
    class B
    {
    public:
    	B() {};
    	~B() {};
    	void print_b(A& a)
    	{
    		a.print_a();
    	}
    };
    
    int main()
    {
    	A a(20,"name");
    	B b;
    	b.print_b(a);
    	system("pause");
    	return 0;
    }
    

    注意:

    1、友元类是单向的,即类B是类A的友元类,但类A不是类B的友元类
    1、友元类不能传递,即类B是类A的友元类,类C是类B的友元类,但类C不是类A的友元类

    3.前项声明

    使用前面两种方法,如果将两个类在不同的头文件中声明,则需要在第二个类中包含第一个类的头文件,但使用类的前向声明则不用使用#include"xxx",具体实现如下:

    代码段1:在person.h头文件
    #pragma once
    #ifndef _PERSON_H
    #define _PERSON_H
    #include <string>
    #include <iostream>
    class Person
    {
    public:
    	Person(int _age, std::string _name) :age(_age), name(_name) {}
    	~Person() {};
    	void print() const
    	{
    		std::cout << name << "	" << age << std::endl;
    	}
    private:
    	int age;
    	std::string name;
    };
    
    #endif
    

    代码段2:在teacher.h头文件中
    #pragma once
    #ifndef _TEACHER_H
    #define _TEACHER_H
    //#include "person.h"   //前两种方法
    
    class Person;  //类的前向声明
    class Teacher
    {
    public:
    	Teacher() {};
    	~Teacher() {};
    	void print(Person& person)
    	{
    		person.print();
    	}	
    };
    #endif
    
    代码段3:主文件main.cpp
    #include<iostream>
    #include "person.h"
    #include "teacher.h"
    int main()
    {
    	Person p(40, "lisan");
    	Teacher teacher;
    	teacher.print(p);
    	system("pause");
    	return 0;
    }
    

    注意:

    1、类的前向声明只能用于定义指针、引用、以及用于函数形参的指针和引用
    2、前向声明的类是不完全的类型,因为只进行了声明而没有定义

    前向声明的作用

    1、在预处理时,不需要包含#include"xxx",相对节约编译时间
    2、方便的解决两种类类型互相使用的问题。

    4.单例模式

    单例模式是程序设计模式中最常用的模式之一,其主要思想是将类的构造函数声明为私有的防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的实现由一个public的类方法代劳,该方法返回单例类唯一的实例。
    注意:

    采用单例模式的对象在进程结束才被释放。
    关于单例模式的详细内容大家可以去看单例模式的知识。下面是一个典型的单例例子:

    #include<iostream>
    #include<string>
    using namespace std;
    
    class Singleton 
    {
    public:
    	static Singleton* getInstance()
    	{
    		instance =  new Singleton();
    		return instance;
    	}
    	~Singleton() {};
    private:
    	Singleton() {};
    	static Singleton* instance;
    };
    

    下面看怎么在另一个类中使用单例模式实现成员函数的调用:

    class Singleton
    {
    public:
    	static Singleton* getInstance()
    	{
    		if (instance == nullptr)
    		{
    			instance = new Singleton();
    			return instance;
    		}
    		else
    			return  instance;
    	}
    	static void print_instance()
    	{
    		cout<<name <<" " <<age <<endl;
    	}
    	~Singleton() {};
    private:
    	Singleton() {};
    	static Singleton* instance;
    	static int age;
    	static string name;
    };
    
    int  Singleton::age = 20;
    string Singleton::name = "lisan";
    Singleton* Singleton::instance = nullptr;
    
    class A
    {
    
    public:
    	void print_a()
    	{
    		 Singleton::getInstance()->print_instance();
    	}
    
    };
    int main()
    {
    	A a;
    	a.print_a();
    	system("pause");
        return 0;
    }
    

    作者:xqs习惯就好 原文:https://blog.csdn.net/qq_35721743/article/details/83592415

    展开全文
  • C++中一个源文件调用另外一个源文件中的方法,并且没有在工程中有头文件的声明。 直接在其中一个源文件中包含另外的源文件,一般是main的源文件中包含另外的源文件。 #include "name.cpp" int main...

    C++中一个源文件调用另外一个源文件中的类的方法,并且没有在工程中有头文件的声明。

    直接在其中一个源文件中包含另外的源文件,一般是main的源文件中包含另外的源文件。

    #include "name.cpp"

    int main()

    {

    //直接定义即可

    other_file_class a;

     

    }

     

    展开全文
  • Cpp调用一个Cpp的方法 main.cpp #include &amp;quot;point.c&amp;quot; int main() { getPoint(10); } point.h void getPoint(int a); point.c #include &amp;amp;lt;stdio.h&amp;amp;gt...

    main.cpp

    #include "point.c"
    int main() {
     getPoint(10);
    }

    point.h

    void getPoint(int a);

    point.c

    #include <stdio.h>
    #include "point.h"
    void getPoint(int a) {
        int *pa = &a;
        printf("pa===1===%d", pa);
        *pa = 6;
        printf("pa===2===%d", pa);
    }
    

    注意:
    1.如果point.c改为cpp文件 将会报错:multiple definition of,正确的写法是抽取出point.h 在main.cpp中#include “point.h”,而在point.c中不引入#include “point.h”,只实现方法即可。

    2.注意point.c中当然也可以不引入#include “point.h” ,因为getPoint已经被实现了,main中直接#include “point.c”。

    3.main.cpp和point.c中都引入point.h,但是main.cpp不#include “point.c”会报:undefined reference to `getPoint(int)’

    4.point.c中 #include “point.h” 引号换成<>将报错“ fatal error: point.h: No such file or directory”

    5.值得探讨的是 如果point是以c文件格式引入的话,不需要提取poin.h文件也不会报multiple definition of的错误。

    6.与 1 截然不同 当point为c文件的时候,我们应该在main中#include “point.h”和#include “point.c” 然后在point.c实现方法即可。

    展开全文
  • 有时候,两个之间并没有继承的关系,但是其中一个类需要引用另一个类中的成员变量或者成员函数。怎样办到呢? 假设已经新建了两个A、B。 class A { public: A(); ~A(); public: int nAdd; int add(); ...

    有时候,两个类之间并没有继承的关系,但是其中一个类需要引用另一个类中的成员变量或者成员函数。怎样办到呢?


    假设已经新建了两个类A、B。

    class A
    {
    public:
    	A();
    	~A();
    public:
    	int nAdd;
    	int add();
    };

    class B
    {
    public:
    	B();
    	~B();
    
    public:
    	int nAdd;
    	int x;
    };

    现在需要在类A的成员函数中调用类B的成员变量B::nAdd、B::x,使得A::nAdd与B::nAdd相加,那么只需要在类A的.cpp文件中包含类B的头文件B.h

    A.cpp

    #include "stdafx.h"
    #include "A.h"
    #include "B.h"//包含类B的头文件
    
    A::A()
    {
    	nAdd = 6;//初始化
    }
    
    
    A::~A()
    {
    }
    int A::add()
    {
    	B BB;//实例化一个对象
    	BB.x = 5;//给对象中的一个成员变量赋值
    	int result;
    	result = nAdd + BB.nAdd-BB.x;//调用BB中的成员变量(B中的构造函数初始化B::nAdd=3)
    	return result;
    }

    主函数中调用add();

    #include "stdafx.h"
    #include "A.h"
    #include "B.h"
    #include<iostream>
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	A AA;
    	int result = AA.add();
    	cout<< result;
    	system("pause");
    	return 0;
    }



    展开全文
  • C++调用Java方法

    2020-06-17 14:38:49
    最近在搞JNI那块,发现网上很多都是Java调用JNI,然后...另一种是Java调用C++,然后在该调用C++里又回调另外一个Java方法。其实这两种方法(或其他方法),都是要用到 JNIEnv,有关JNI的讲解可查阅此文章http...
  • 问题:C++类中数据成员为类型时,定义为对象还是定义为指针? C++中,ClassTest objTest;就已经构造了对象,分配了空间;而在C#,Java中ClassTest objTest;只是声明,并没有分配空间。 在C++中,ClassTest ...
  • C++调用java

    2012-05-07 22:55:29
    C++调用Java JNI之C++调用Java  ——java.lang.String  为什么要用C++调用Java?很难回答,写着文章只是觉得JNI很有意思。于是开始编写段使用VC++在Windows系统里调用java的String,在C++里调用...
  • 调用的方法: static cocos2d::Label* label; void HelloWorld::showText(std::string txt) { ...把上面的方法传递给另外一个类CGameSocket 的一个方法 CGameSocket gs; void(*func)(std::string); func =
  • (1)前提为,另一个文件中的函数,不能是静态函数,即不能有static修饰。 调用方法,在调用前进行声明,然后直接调用即可。 声明方法: 1 直接在调用前,写函数声明: 如调用函数为int func(int a),那么在...
  • C++调用.lib的方法

    2019-01-09 13:09:38
    C++调用.lib的方法 1. 隐式加载 1. 隐式加载链接,有三种方法: 1. LIB文件直接加入到工程文件列表中。 在VC中打开File View页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在...
  • C#调用C++

    2012-06-18 20:45:17
    这里讲C#调用C++,也是我真正想要的做的。网上关于这方面的知识挺杂,我折腾了好久终于搞定了。 大致有两种方法。第种C#直接调,用到System.Runtime.InteropServices中的Marshal,貌似这样可能通过直接操纵...
  • c++调用python numpy编程

    2019-10-18 15:17:31
    找了很多的c++调用python的方法,首先可以肯定的有不止一种方式,直接使用python库、numpy arrayobject库来做;另外一种是使用boost/python boost/numpy的方式。后一种没有调通,是链接库的问...
  • C++调用Python3.7

    2019-08-19 16:42:34
    C++调用Python3.7前言配置环境第一步新建一个控制台项目,修改属性页第二步修改Python安装目录下文件代码测试测试用Python3语法输出“Hello World!”测试用Python文件输出“Hello World!”结尾引用 前言 最近在做...
  • 方法一:1/ 用system()#include &lt;stdlib.h&gt;int system(const char *command);函数工作大致流程:system()函数先fork个子进程,在这个子进程中调用/bin/sh -c来执行command指定的命令。/bin/sh在系统...
  • #include&amp;lt;iostream&amp;gt;... int getx()//如何引用私有的成员 { return x; } void setx(int xx) { x = xx; } int gety()//如何引用私有的成员 { ...
  • Mgr.cpp,Mgr.h Demo.cpp,Demo.h
  • 1、得用友元,1的头文件中include2的头文件,然后在1头文件中找到定义的地方,在public下加friend xx2class; 这样定义的2的对象就可以使用2的成员函数和变量了 那2的对象在哪里定义呢,窗口的对象怎么...
  • C++调用DLL方法

    2013-10-09 20:55:53
    调用的原理:调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这函数和进程内部一般函数的调用方法相同。Windows提供了两种将DLL映像到进程地址空间的方法:隐式调用(通过lib和...
1 2 3 4 5 ... 20
收藏数 280,532
精华内容 112,212
关键字:

c++ 调用另外一个类的方法