学习传承
Learning inheritance
我正在努力理解继承,我需要一些帮助来构建两个类。第一个叫A,第二个叫B。A有一个私有整数值"m_A"。它有两个构造函数,默认的构造函数将m_a设置为5。另一个是将一个名为m的整数作为自变量,并将m_a的值设置为m。对于成员函数,它将有两个。第一个将返回m_a。第二个将打印"你好,来自A!"。让我们转到B。B将有一个私有字符串m_s。默认构造函数将m_s设置为"asd"或空字符串以外的任何值,构造函数将字符串作为参数并将m_s设为其值。就函数而言,首先B将有一个函数,它将返回m_s。它将有一个与a中的打印"Hello from a"函数同名的函数,该函数将覆盖它,并将打印"你好from B!"(这是多态性吗?)。
这些都是需要的课程。我有以下问题(我将在下面发布我创建的内容)首先,有没有任何方法可以从基类获取私有数据文件。例如,假设我想取m_s变量,将其添加到另一个变量中,并打印出它们的和。这可能吗?
此外,当我试图创建一个具有不同于默认构造函数的构造函数的类时,我会遇到错误。我显然做错了什么。问题是什么。
我想这些都是我现在的问题,所以是时候发布源代码了。
#include <iostream>
#include <string>
using namespace std;
class A
{
private:
int m_a;
public:
A(){m_a = 5;}
A(int m)
{
m_a = m;
}
void pm()
{
cout << "Hello from A!" << endl;
}
int get_a()
{
return m_a;
}
};
class B : A
{
private :
string m_s;
public:
B(){m_s = "asd";}
B(string s)
{
m_s = s;
}
void pm()
{
cout << "Hello from B!" << endl;
}
string get_s()
{
return m_s;
}
};
int main()
{
A a(10);
a.pm();
cout << a.get_a() << endl;
B b("asd");
b.pm();
cout << b.get_s() << endl;
cout << b.get_a() << endl;
return 0;
}
(is that polymorphism ?).
不是这样做的。如果你有一个类型为A*
的指针,指向实际上是B
的对象,并且在该指针上调用pm
正确地调用了B的成员函数,那么这将是多态性的。只有当a中的pm
函数被声明为虚函数时,这才有可能,如下所示。
class A
{
...
virtual void pm(){
...
};
...
int main()
{
A* = new B();
A->pm(); //"Hello from B!"
}
有什么方法可以从基类获取私有数据文件吗
不确定您在这里的意思-您的示例谈到了派生类的私有字段。通常,良好的类设计意味着派生类不需要访问基类的(私有)字段,如果需要,则应保护该字段。
至于编译错误@ArunKumar准确地得到了它。当你说Class B : A
你从A继承,但默认情况下所有成员都继承为私有成员,因此基类构造函数是私有的,所以你不能使用它。
然而,当你说Class B : public A
时,它是光谱的另一端。基类的所有成员在派生类中保留其可访问性(public仍然是public等)
问题是您使用的是私有继承:
class B : A {
默认情况下,通过类的继承是私有的。在A
之前添加public
。
class B : public A {
至于你的另一个问题。。。
I want to take the m_s variable, add it to another one and print out their sum.
当涉及到std::string
时,这很容易。只需创建另一个成员函数:
void addTom_s(string s) { m_s += s; }
尝试将class B : A
更改为class B : public A
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 神经网络不学习.卡在50%
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何将经过训练的机器学习模型保存在python中并将其加载到C++中进行预测?
- 学习 c++,编译错误"no matching function for call"
- 学习数据结构和算法的简单方法
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- 学习嵌套循环C++与示例混淆
- 从书本中学习C++无法使该程序与类一起工作
- 刚开始学习C++
- 学习C++并在早期示例中遇到错误(在非静态数据成员之前需要构造函数)
- 学习时空复杂性时语句XYZ的含义是什么?
- Q学习扫雷行为
- 我可以在没有C++的情况下学习 Win32 API(仅使用 C)吗?
- 学习C,我的编译器已经知道bool(Visual Studio 2017)
- 我正在学习C++,我不能使用指针访问参考吗?(举个例子)
- 试图学习指针,为什么要使用它们而不是仅仅使用&?
- Microsoft CNTK加强学习C 示例
- 学习传承