#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; }
时间: 2023-07-23 18:55:08 浏览: 203
这段代码是一个简单的多继承例子,定义了三个类 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"。
相关问题
定义一个描述学生基本情况的类,数据成员包括:年龄、姓名、性别;成员函数包括:输入和输出各个数据成员的值。分别给出如下的3个文件:①含类定义的头文件student.h,//student.h (这是头文件,在此文件中进行类的声明)class Student //类声明{ public:void display( );//公用成员函数原型声明 private:int num;char name[20];char sex; };②包含成员函数定义的源文件student.cpp//student.cpp//在此文件中进行函数的定义#include <iostream>using namespace std;#include "student.h"//不要漏写此行,否则编译通不过void Student::display( )//在类外定义display类函数{ cout<<"num: "<<num<<endl; cout<<"name: "<<name<<endl; cout<<"sex: "<<sex<<endl;}③包含主函数的源文件main.cpp。为了组成一个完整的源程序,应当有包括主函数的源文件://main.cpp主函数模块#include <iostream>using namespace std;#include "student.h"//将类声明头文件包含进来int main( ){Student stud;//定义对象 stud.display();//执行stud对象的display函数return 0;}请完善该程序,在类中增加一个对数据成员赋初值的成员函数set_value。上机调试并运行。
完善后的程序如下:
student.h
```cpp
// student.h
class Student {
public:
void display();
void set_value(int n, char *str, char s);
private:
int num;
char name[20];
char sex;
};
```
student.cpp
```cpp
// student.cpp
#include <iostream>
#include <cstring>
#include "student.h"
using namespace std;
void Student::display() {
cout << "num: " << num << endl;
cout << "name: " << name << endl;
cout << "sex: " << sex << endl;
}
void Student::set_value(int n, char *str, char s) {
num = n;
strcpy(name, str);
sex = s;
}
```
main.cpp
```cpp
// main.cpp
#include <iostream>
#include <cstring>
#include "student.h"
using namespace std;
int main() {
Student stud;
stud.set_value(1001, "Tom", 'M');
stud.display();
return 0;
}
```
程序的输出结果为:
```
num: 1001
name: Tom
sex: M
```
试定义一个字符串类CString,声明如下: class CString { char *str; //字符串 public: CString(); //构造函数 CString(const char s[]); //构造函数 CString(CString&t); //拷贝构造函数 ~CString(); int Set(const char s[]); //复制字符串 void Print(); //输出 }; 在如下主函数中对该类进行测试。 int main() { char s0[100], s1[100]; cin >> s0 >> s1; CString cs0(s0),cs1(cs0); cs0.Set(s1); cs0.Print(); cs1.Print(); return 0; } 输入输出示意如下: ASDF zxcv zxcvASDF 请在答题窗口录入编写的完整程序。
```
#include<iostream>
#include<cstring>
using namespace std;
class CString{
private:
char *str;
public:
CString(){
str = NULL;
}
CString(const char s[]){
str = new char[strlen(s) + 1];
strcpy(str, s);
}
CString(CString&t){
str = new char[strlen(t.str) + 1];
strcpy(str, t.str);
}
~CString(){
if (str != NULL)
delete[] str;
}
int Set(const char s[]){
if (str != NULL)
delete[] str;
str = new char[strlen(s) + 1];
strcpy(str, s);
return strlen(str);
}
void Print(){
cout << str << endl;
}
};
int main(){
char s0[100], s1[100];
cin >> s0 >> s1;
CString cs0(s0), cs1(cs0);
cs0.Set(s1);
cs0.Print();
cs1.Print();
return 0;
}
```
阅读全文