CPlusPlusThings/practical_exercises/10_day_practice/day5/rela/rela.cpp

55 lines
1.1 KiB
C++

/* 基类与派生类(重要).cpp */
#include <iostream>
using namespace std;
class A {
int a;
public:
void setA(int x) { a = x; }
int getA() { return a; }
};
class B : public A {
int b;
public:
void setB(int x) { b = x; }
int getB() { return b; }
};
void f1(A a, int x) { a.setA(x); }
void f2(A *pA, int x) { pA->setA(x); }
void f3(A &rA, int x) { rA.setA(x); }
int main() {
A a1, *pA;
B b1;
a1.setA(1);
b1.setA(2);
//把派生类对象赋值给基类对象。
a1 = b1;
cout << a1.getA() << endl;
cout << b1.getA() << endl;
a1.setA(10);
cout << a1.getA() << endl;
cout << b1.getA() << endl;
//把派生类对象的地址赋值给基类指针。
pA = &b1;
pA->setA(20);
cout << pA->getA() << endl;
cout << b1.getA() << endl;
//用派生类对象初始化基类对象的引用。
A &ra = b1;
ra.setA(30);
cout << pA->getA() << endl;
cout << b1.getA() << endl;
b1.setA(7);
cout << b1.getA() << endl;
f1(b1, 100);
cout << "1111111111" << endl;
cout << b1.getA() << endl; // 7
f2(&b1, 200);
cout << b1.getA() << endl;
f3(b1, 300);
cout << b1.getA() << endl;
return 0;
}