在C+中继承类函数+;:一般问题,以便更好地理解,以及是否有人能指出我的错误 所以我正在学习C++,尝试一个小项目。在此期间,我有很多问题,但让我们说谷歌搜索有点帮助。切中要害:我希望一个类能够使用另一个类的函数,我发现了类似的问题,并使用了我认为最适合我的情况的方法,但我仍然觉得我的代码或方法是错误的。此外,我也没有完全实现我希望代码实现的功能。下面的代码只是我的原始项目的一个示例/副本,只包含两个用于测试的类,以使读者和我自己的事情尽可能简单
类别1.h:在C+中继承类函数+;:一般问题,以便更好地理解,以及是否有人能指出我的错误 所以我正在学习C++,尝试一个小项目。在此期间,我有很多问题,但让我们说谷歌搜索有点帮助。切中要害:我希望一个类能够使用另一个类的函数,我发现了类似的问题,并使用了我认为最适合我的情况的方法,但我仍然觉得我的代码或方法是错误的。此外,我也没有完全实现我希望代码实现的功能。下面的代码只是我的原始项目的一个示例/副本,只包含两个用于测试的类,以使读者和我自己的事情尽可能简单,c++,inheritance,C++,Inheritance,类别1.h: #ifndef CLASS1_H #define CLASS1_H #include <string> #include <vector> class Class1 { public: Class1(); Class1(const Class1& orig); virtual ~Class1(); void setPeople(std::string newPeople); std::string getP
#ifndef CLASS1_H
#define CLASS1_H
#include <string>
#include <vector>
class Class1 {
public:
Class1();
Class1(const Class1& orig);
virtual ~Class1();
void setPeople(std::string newPeople);
std::string getPeople();
private:
std::vector <std::string> people;
};
#endif
\ifndef CLASS1\u H
#定义类别1_H
#包括
#包括
一班{
公众:
类别1();
类别1(常数类别1和初始值);
虚拟~Class1();
void setPeople(std::string newPeople);
std::string getPeople();
私人:
性病患者;
};
#恩迪夫
类别1.cpp
#include "Class1.h"
#include <string>
#include <vector>
#include <cstdlib>
#include <iostream>
using namespace std;
Class1::Class1() {
}
Class1::Class1(const Class1& orig) {
}
Class1::~Class1() {
}
void Class1::setPeople(string newPeople){
people.push_back(newPeople);
}
string Class1::getPeople(){
vector<string>::iterator it = people.begin();
cout<<*it<<endl;
}
#包括“Class1.h”
#包括
#包括
#包括
#包括
使用名称空间std;
Class1::Class1(){
}
Class1::Class1(常量Class1和原始){
}
Class1::~Class1(){
}
void Class1::setPeople(字符串newPeople){
人。推回(新人);
}
字符串Class1::getPeople(){
vector::iterator it=people.begin();
我想知道你为什么要把它分为两节课,但我想如果它是一个学习练习,那也没什么关系
<>我通常不编码C++,但是我觉得你可以用多种方法来解决这个问题。我会给你一些想法,希望这会让你选择一种你喜欢的方法,或者自己想想。< /P>
你可以:
1) 拥有两个类都使用的全局向量(通常不建议使用全局向量,但这是可能的。)
2) 在类中有一个类,这样父类就可以访问子类。(您可以将向量存储在子类中,并从父类读取它。)
3) 制作一个包含你需要的所有内容的类。
4) 将向量设置为公共成员而不是私有成员,以便可以从主/其他对象访问它。(如果使用此选项,请确保将指针从一个类传递到另一个类的数据,这样比在类之间来回复制数据更有效)
应该有无数其他的方法来解决这个问题
另一方面,我看到很多人使用过一次#pragma,而不是#ifndef HEADER#u H#define muck。我在C中使用了这些定义,我不能100%确定#pragma一次是否完全相同,但检查一下可能会很好。每次创建头文件时都会保存一些键入:)
(我没有给出代码示例,正如您所说的您想学习,祝您好运:D)我想知道您为什么要将其分为两个类,但我认为这是否是一个学习练习并不重要
<>我通常不编码C++,但是我觉得你可以用多种方法来解决这个问题。我会给你一些想法,希望这会让你选择一种你喜欢的方法,或者自己想想。< /P>
你可以:
1) 拥有两个类都使用的全局向量(通常不建议使用全局向量,但这是可能的。)
2) 在类中有一个类,这样父类就可以访问子类。(您可以将向量存储在子类中,并从父类读取它。)
3) 制作一个包含你需要的所有内容的类。
4) 将向量设置为公共成员而不是私有成员,以便可以从主/其他对象访问它。(如果使用此选项,请确保将指针从一个类传递到另一个类的数据,这样比在类之间来回复制数据更有效)
应该有无数其他的方法来解决这个问题
另一方面,我看到很多人使用过一次#pragma,而不是#ifndef HEADER#u H#define muck。我在C中使用了这些定义,我不能100%确定#pragma一次是否完全相同,但检查一下可能会很好。每次创建头文件时都会保存一些键入:)
(我没有给出代码示例,正如您所说的,祝您好运:D)为什么您认为one.getPeople()
应该给出相同的结果?您从来没有在one
中添加过名称string Class1::getPeople(){vector::iterator it=people.begin()你认为two
继承自one
所以one
应该是two
影响的实例吗?@NathanOliver是的,我认为会是这样的,所以这是错误的,我不能用一个来获得相同的结果。@Nick不,你不能。two
有自己的实例Class1与它捆绑在一起。影响它的唯一方法是通过two
one
是它自己的独立实例,并且完全独立于two
。为什么你认为one.getPeople()
应该给你同样的结果?你从来没有给one
添加过名称字符串Class1::getPeople()){vector::iterator it=people.begin()你认为two
继承自one
所以one
应该是two
影响的实例吗?@NathanOliver是的,我认为会是这样的,所以这是错误的,我不能用一个来获得相同的结果。@Nick不,你不能。two
有自己的实例Class1与它捆绑在一起。影响它的唯一方法是通过two
one
是它自己的独立实例,并且完全独立于two
。非常感谢您,我真的非常感谢您的时间!我想我将尝试其中的每一个(这确实是为了学习,只是当我试图思考一个要练习的项目时,我脑子里突然闪现出一些想法)!再次非常感谢:)很高兴看到人们这样做:)我只是做了一些结构,里面有空函数指针,看看我是否可以绑定多个函数
#ifndef CLASS2_H
#define CLASS2_H
#include "Class1.h"
#include <string>
class Class2:
public Class1 {
public:
Class2();
Class2(const Class2& orig);
virtual ~Class2();
void setName(std::string newName);
std::string getName();
private:
std::string name;
};
#endif
#include "Class1.h"
#include "Class2.h"
#include<string>
#include<vector>
using namespace std;
Class2::Class2() {
}
Class2::Class2(const Class2& orig) {
}
Class2::~Class2() {
}
void Class2::setName(string newName){
name=newName;
setPeople(name);
}
string Class2::getName(){
}
#include <cstdlib>
#include <iostream>
#include <string>
#include "Class1.h"
#include "Class2.h"
using namespace std;
int main(int argc, char** argv) {
Class1 one;
Class2 two;
two.setName("Random name");
two.getPeople();
return 0;
}