#include<iostream> #include<cstring> using namespace std; class MyclassA{ public: MyclassA(char *s) { strcpy(str,s); } void print() { cout<<str<<endl; } protected: char str[100]; }; class MyclassB{ public: MyclassB(char *s) { strcpy(str,s); } void print() { cout<<str<<endl; } protected: char str[100]; }; class MyclassC:public MyclassA,public MyclassB{ public: MyclassC(char *s1,char *s2):MyclassA(s1),MyclassB(s2) { } void splicing() { strcpy(str,MyclassA::str); //ERROR**********found********** strcat(str,MyclassB::str); } void print() { cout<<str<<endl; } private: char str[200]; }; int main(void) { MyclassC test("stringA","stringB"); //ERROR**********found********** test.print(S); // 输出stringA //ERROR**********found********** test.print(s); // 输出stringB test.splicing(); test.print(); // 输出stringAstringB system("pause"); return 0; }错在哪
时间: 2023-07-07 07:44:37 浏览: 163
这段代码中有多处错误,我来一一指出并解释:
1. 在 MyclassC 的构造函数中,应该使用初始化列表来初始化继承的两个基类 MyclassA 和 MyclassB 中的数据成员,而不是在构造函数体内直接调用它们的构造函数来初始化。正确的构造函数应该是这样的:
```
MyclassC(char *s1, char *s2) : MyclassA(s1), MyclassB(s2) {}
```
2. 在 MyclassC 的 splicing 函数中,应该使用 MyclassA 和 MyclassB 中的 print 函数来分别输出它们各自的字符串,而不是直接访问它们的数据成员。正确的 splicing 函数应该是这样的:
```
void splicing() {
MyclassA::print();
MyclassB::print();
strcpy(str, MyclassA::str);
strcat(str, MyclassB::str);
}
```
3. 在 main 函数中,调用 MyclassC 的 print 函数时应该传入一个字符串字面量,而不是一个未定义的变量名。正确的调用应该是这样的:
```
test.print("S");
test.print("s");
```
4. 在 main 函数末尾,应该使用 `system("pause")` 来暂停程序的执行,否则程序会在输出结果后立即退出。
相关问题
#include<iostream> #include<cstring> using namespace std; class MyclassA{ public: MyclassA(char *s) { strcpy(str,s); } void print() { cout<<str<<endl; } protected: char str[100]; }; class MyclassB{ public: MyclassB(char *s) { strcpy(str,s); } void print() { cout<<str<<endl; } protected: char str[100]; }; class MyclassC:public MyclassA,public MyclassB{ public: MyclassC(char *s1,char *s2):MyclassA(s1),MyclassB(s2) { } void splicing() { strcpy(str,MyclassA::str); //ERROR**********found********** strcat(str,MyclassB::str); } void print() { cout<<str<<endl; } private: char str[200]; }; int main(void) { MyclassC test("stringA","stringB"); //ERROR**********found********** test.print(); // 输出stringA //ERROR**********found********** test.print(); // 输出stringB test.splicing(); test.print(); // 输出stringAstringB system("pause"); return 0; }
这段代码是一个简单的多继承例子,定义了三个类 MyclassA、MyclassB 和 MyclassC,其中 MyclassA 和 MyclassB 都有一个 char 类型的成员变量 str 和一个 print() 函数用于输出该变量的值,而 MyclassC 继承了 MyclassA 和 MyclassB,定义了一个新的成员变量 str 和一个 splicing() 函数用于将 MyclassA 和 MyclassB 的 str 变量拼接起来,并且重载了 MyclassA 和 MyclassB 的 print() 函数。
在 main() 函数中,创建了一个 MyclassC 的实例 test,传入了两个参数分别为 "stringA" 和 "stringB",然后分别调用了两次 test.print() 函数,第一次输出 "stringA",第二次输出 "stringB",最后调用了 test.splicing() 函数将 MyclassA 和 MyclassB 的 str 变量拼接起来,并输出拼接后的结果 "stringAstringB"。
#include<iostream> using namespace std; class Car { char* pName; int id; int m; public: Car(string name) { } }; 怎么将string name转换为char*pName
您可以使用`c_str()`函数将`std::string`类型转换为`const char*`类型,然后再将其复制到`char*`类型的变量中。下面是修改后的代码:
```
#include <iostream>
using namespace std;
class Car {
char* pName;
int id;
int m;
public:
Car(string name) {
pName = new char[name.length() + 1];
strcpy(pName, name.c_str());
id = 0;
m = 0;
}
~Car() {
delete[] pName;
}
};
int main() {
Car car("My car");
return 0;
}
```
在构造函数中,我们使用`new char[name.length() + 1]`为`pName`分配内存,该内存可以容纳字符串及其终止符。然后我们使用`strcpy()`函数将`name.c_str()`复制到`pName`中。最后,在析构函数中,我们使用`delete[]`释放内存。
阅读全文