一直没扯清这几个访问限定符,这次用vs2010下用代码实验下,记录如下:
class Base{
public:
Base(string book_a = " ", double price_a = 0.0): book(book_a), price(price_a) {}
protected:
double price;
private:
string book;
}
class Drived: public Base{
public:
Drived(string book_a = " ", double price_a = 0.0):Base(book_a, price_a) {}
void memfcn(const Drived &d, const Base &b)
{
double ret = price; //OK,使用的是this->price
string temp = book; //error,虽然还是想访问this的基类部分,但是行不通!!!
ret = d.price; //OK, 派生类通过派生类对象访问基类的protected成员
temp = d.book; //error
ret = b.price; //error, 派生类对基类对象的protected成员没有特殊访问权限。
temp = b.book; //error
}
}
注意:将基类与派生类区别开来,尽管对于派生类对象,它也具有基类成分。
另外:
公有继承:基类保持自己的访问级别。
保护继承:基类的public和protected成员在派生类中为protected.
私有继承:基类所有成员在派生类中为private.