class FirstClass {
protected:
char* str_value;
}
class SecondClass : FirstClass {
public:
SecondClass() : FirstClass (str_value)
{}
};
如何获取str_value基类的值?
更新
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
class FirstClass {
protected:
char* str_value;
public:
FirstClass() {}
FirstClass(const char* value) {
set(value);
}
FirstClass(const FirstClass &obj){};
~FirstClass() {delete[] str_value;}
void set(const char* value) {
delete[] str_value;
str_value = new char[strlen(value)+1];
strcpy(str_value, value);
}
const char* get() {
return str_value;
}
};
class SecondClass : FirstClass {
public:
SecondClass(const char* str_value) : FirstClass (str_value) {}
};
int main() {
FirstClass F_object("aaaaaaaaaa");
F_object.set("bbbbbbbbbb");
printf("%s", F_object.get());
FirstClass F_object2 = F_object;
SecondClass S_object();
S_object.get();
return 0;
}
你好像很迷茫...
你需要
SecondClass用一些字符串来创建FirstClass吗?为此,您不需要从 接收此行FirstClass,而是将其传递:如果您随后
SecondClass需要引用它,则该字段被声明为protected,因此只需按名称...更新
你的错误。
它应该是这样的:
最好这样(
const后get())继承必须开放!
这个 -
不是真正的对象
S_object,而是一个不带参数并返回的函数的声明 。简单写——S_objectSecondClass所以或
(但是,据我记得,你有一个古老的编译器,
{}它可能不会错过。)还有一件事——你的默认构造函数会杀死程序,因为其中
str_value会有析构函数想要删除的垃圾。最好完全删除默认构造函数,并通过提供像这样的默认值使其成为普通构造函数您在
protected该部分中有它,因此,您可以从派生类访问它。如果您在工作室工作,您可以输入this->,然后您将看到一个可见名称的下拉列表。在这里你可以直接叫名字。并调整派生类构造函数中的代码和基类中的填充,就像哈利的答案一样。