当前位置:
首页 >
C++ 友缘关系
发布时间:2024/2/28
47
豆豆
要求
人物
基类:class Lovers
- 子类:Boyfriend,Girlfriend
第三者:class Others
- 子类:(无)
故事是这样的
基类Lovers的name属性访问级别为protected,但将Others类设为友缘关系。
第三者Others类到自己拥有kiss方法,希望调用。此kiss方法传参为Boyfriend类型的的对象。
代码
#include<iostream> #include<string> //基类 class Lovers { public:Lovers(std::string lovers_name);//构造器 protected:std::string name;friend class Others; }; //子类 class Boyfriend :public Lovers { public:Boyfriend(std::string name); }; class Girlfriend :public Lovers { public:Girlfriend(std::string name); }; //第三者 class Others { public:std::string name;Others(std::string name);//构造器void dosomething(Boyfriend duixiangname); }; //基类构造器 Lovers::Lovers(std::string lovers_name) {this->name = lovers_name; } //子类构造器 Boyfriend::Boyfriend(std::string name) :Lovers(name) {this->name = name; } Girlfriend::Girlfriend(std::string name) : Lovers(name) {this->name = name; } //第三者构造器 Others::Others(std::string name) {this->name = name; } //子类方法(访问基类的private部分) void Others::dosomething(Boyfriend duixiangname)//传入的是一个class对象 {std::cout << "I am kissing " << duixiangname.name << std::endl; } int main() {Boyfriend person1("Tony");Girlfriend person2("Alice");Others person3("Uncle");person3.dosomething(person1);system("pause"); }运行结果
第三者Others成功运用自己的kiss方法访问到了Lovers类的name成员
输出:
I am kissing Tony
请按任意键继续. . .
版本2
将29,51行的参数类型Boyfriend改成了Lovers,这样在60行的调用不受限制
#include<iostream> #include<string> //基类 class Lovers { public:Lovers(std::string lovers_name);//构造器 protected:std::string name;friend class Others; }; //子类 class Boyfriend :public Lovers { public:Boyfriend(std::string name); }; class Girlfriend :public Lovers { public:Girlfriend(std::string name); }; //第三者 class Others { public:std::string name;Others(std::string name);//构造器void dosomething(Lovers duixiangname); }; //基类构造器 Lovers::Lovers(std::string lovers_name) {this->name = lovers_name; } //子类构造器 Boyfriend::Boyfriend(std::string name) :Lovers(name) {this->name = name; } Girlfriend::Girlfriend(std::string name) : Lovers(name) {this->name = name; } //第三者构造器 Others::Others(std::string name) {this->name = name; } //子类方法(访问基类的private部分) void Others::dosomething(Lovers duixiangname)//传入的是一个class对象 {std::cout << "I am kissing " << duixiangname.name << std::endl; } int main() {Boyfriend person1("Tony");Girlfriend person2("Alice");Others person3("Uncle");person3.dosomething(person2);system("pause"); }输出:
I am kissing Alice
请按任意键继续. . .
总结
- 上一篇: C++ 覆盖方法、重载方法的理解
- 下一篇: C++运算符重载 实现有理数(分数)的加