首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中包含与继承的初学了解

2014-01-14 
C++中包含与继承的初学理解//

C++中包含与继承的初学理解

//============================================================================
// Name        : contain.cpp
// Author      : chenyan
// Version     :
// Copyright   : Your copyright notice
// Description : contain in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;

class A{
public:
A(){x = 0;y = 0;}
A(int i,int j){x = i;y = j;}
int getx(){return x;}
void setx(int i){x = i;}
int gety(){return y;}
void sety(int i){y = i;}
protected:  //保护成员也只能通过公有成员函数来访问,子类可直接访问
int y;
private:
int x;
};

//类的包含
class B{
public:
A c; //公有包含类A的对象,不能直接访问类A对象的私有和保护成员,可以调用类A的公有成员函数访问该对象
B(){y = 0;}
B(int i,int j,int l,int m,int k):a(i,j),b(l,m){y = k;}
A geta(){return a;}
A getb(){return b;}
void setA_x(int i){c.setx(i);}//调用类A的成员函数
void setA_y(int i){c.sety(i);}
int gety(){return y;}
private://私有包含类A的对象,但不能直接访问类A对象的私有和保护成员,必须调用类A的公有成员函数来访问
A a;
A b;
int y;
};

//类的继承
class C:private A{//公有,保护,私有继承都可以
public:
int getA_x(){return getx();}//不能直接访问类A对象的私有成员,必须调用基类的接口函数
int getA_y(){return y;}//可以直接使用本类的公有成员函数访问基类的保护成员
void setA_x(int i){setx(i);}//必须调用基类的公有成员函数来访问基类的私有成员变量
void setA_y(int i){y = i;}//可以直接使用本类的接口函数访问基类的保护成员变量
int getm(){return m;}
void setm(int i){m = i;}
private:
int m;
};

int main() {
B b(1,2,3,4,5);
A a;
C c;
    a.sety(5);
    c.setA_y(10);//直接使用本类的公有成员函数访问基类的保护成员
    cout << "c.y=" << c.getA_y() << endl;//可以直接使用该类的公有成员函数访问基类的保护成员
    cout << "a.x=" << a.getx() << endl;
    cout << "a.y=" << a.gety() << endl;

    //私有包含类必须使用本类的公有成员函数调用被包含类的公有成员函数来访问被包含类的私有和保护成员变量
cout << "b.a.x=" << b.geta().getx() << endl;
cout << "b.a.y=" << b.geta().gety() << endl;
cout << "b.b.x=" << b.getb().getx() << endl;
cout << "b.b.y=" << b.getb().gety() << endl;
cout << "b.y=" << b.gety() << endl;
b.c.sety(20);//公有包含类直接调用被包含类A的公有成员函数
cout << "b.c.y=" << b.c.gety() << endl;

return 0;
}

执行结果:
c.y=10
a.x=0
a.y=5
b.a.x=1
b.a.y=2
b.b.x=3
b.b.y=4
b.y=5
b.c.y=20
[解决办法]
是来散分的吗?我接
[解决办法]
what's your question?
[解决办法]
个人理解,继承更多的用来标准化公共接口。
如果,你的基类只是简单的为了完成一些独立功能, 包含和继承却别不大。
[解决办法]
我也来接分,我个人认为提出所谓的包含或组合根本就是没事找事,因为这个东西我们广大程序员一直在用,用得非常自然,可有的脑残非要把它提出来和继承相提并论,把简单的东西弄复杂,搞得很高端洋气上档次,好比萝卜开会非要叫成群英荟萃。
[解决办法]
我也来接分,包含和继承有点无聊.....

热点排行