1.class(类)
class Drink{//定义饮料类 public://public下面的东西可以被外面访问 char* type;//饮料种类 double price;//饮料价格 double volume;//饮料体积 double currentVolume;//饮料剩余体积 bool isEmpty();//判是否喝完:成员函数(member function) void addDrink(double vol);//添加饮料:成员函数 Drink();//初始化函数,用于初始化一杯饮料 ~Drink();//析构函数,用于在不需要这杯饮料时销毁数据以节省空间 private://private不能被访问 double massOfIngredientA;//A成分的含量 double massOfIngredientB;//B成分的含量 double massOfIngredientC;//C成分的含量 };//别忘了最后要加一个分号
当我们需要描述一杯饮料的时候,我们可以如下使用Drink类:
Drink a;//新建一个饮料对象 printf("The Volume Of The Drink is %lf\n",a.volume);
2.public,private,protected的区别「引用」
在C++中,作用域除了public,private还有protected。那这三者的区别到底是什么呢?
先来看个示例,就明白了:
#include<iostream> using namespace std; class A{ public: int a; A(){ a1 = 1; a2 = 2; a3 = 3; a = 4; } void fun(){ cout << a << endl; //正确 cout << a1 << endl; //正确 cout << a2 << endl; //正确,类内访问 cout << a3 << endl; //正确,类内访问 } public: int a1; protected: int a2; private: int a3; }; int main(){ A itema; itema.a = 10; //正确 itema.a1 = 20; //正确 itema.a2 = 30; //错误,类外不能访问protected成员 itema.a3 = 40; //错误,类外不能访问private成员 system("pause"); return 0; }
再来看不是人看的话:
1.类的一个特征就是封装,public和private作用就是实现这一目的。所以: 用户代码(类外)可以访问public成员而不能访问private成员;private成员只能由类成员(类内)和友元访问。 2.类的另一个特征就是继承,protected的作用就是实现这一目的。所以: protected成员可以被派生类对象访问,不能被用户代码(类外)访问。
3.继承
继承,顾名思义,就是一个东西把另一个东西的传统保留下来。
我想要描述一个雪碧对象,雪碧(Sprite)和饮料(Drink)有很多相似之处,我不想重复写代码,于是让Sprite对象继承Drink对象的属性。
class Sprite:public Drink { public: bool hasBubbles();//返回是否有气 }
此处的冒号代表继承。
现在的Sprite对象除了拥有Drink的全部属性(volume,currentVolume,price,massOfIngredientA等),还有了独有的属性(hasBubble());
Q:那么冒号后的public代表什么用法呢?
先看看定义:
继承中的特点: 先记住:不管是否继承,上面的规则永远适用! 有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。 1.public继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:public, protected, private 2.protected继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:protected, protected, private 3.private继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:private, private, private 但无论哪种继承方式,上面两点都没有改变: 1.private成员只能被本类成员(类内)和友元访问,不能被派生类访问; 2.protected成员可以被派生类访问。
接下来是三个例子:
3.1 public继承
#include<iostream> using namespace std; class A{ public: int a; A(){ a1 = 1; a2 = 2; a3 = 3; a = 4; } void fun(){ cout << a << endl; //正确 cout << a1 << endl; //正确 cout << a2 << endl; //正确 cout << a3 << endl; //正确 } public: int a1; protected: int a2; private: int a3; }; class B : public A{ public: int a; B(int i){ A(); a = i; } void fun(){ cout << a << endl; //正确,public成员 cout << a1 << endl; //正确,基类的public成员,在派生类中仍是public成员。 cout << a2 << endl; //正确,基类的protected成员,在派生类中仍是protected可以被派生类访问。 cout << a3 << endl; //错误,基类的private成员不能被派生类访问。 } }; int main(){ B b(10); cout << b.a << endl; cout << b.a1 << endl; //正确 cout << b.a2 << endl; //错误,类外不能访问protected成员 cout << b.a3 << endl; //错误,类外不能访问private成员 system("pause"); return 0; }
3.2 protected继承
#include<iostream> using namespace std; class A{ public: int a; A(){ a1 = 1; a2 = 2; a3 = 3; a = 4; } void fun(){ cout << a << endl; //正确 cout << a1 << endl; //正确 cout << a2 << endl; //正确 cout << a3 << endl; //正确 } public: int a1; protected: int a2; private: int a3; }; class B : protected A{ public: int a; B(int i){ A(); a = i; } void fun(){ cout << a << endl; //正确,public成员。 cout << a1 << endl; //正确,基类的public成员,在派生类中变成了protected,可以被派生类访问。 cout << a2 << endl; //正确,基类的protected成员,在派生类中还是protected,可以被派生类访问。 cout << a3 << endl; //错误,基类的private成员不能被派生类访问。 } }; int main(){ B b(10); cout << b.a << endl; //正确。public成员 cout << b.a1 << endl; //错误,protected成员不能在类外访问。 cout << b.a2 << endl; //错误,protected成员不能在类外访问。 cout << b.a3 << endl; //错误,private成员不能在类外访问。 system("pause"); return 0; }
3.3 private继承
#include<iostream> using namespace std; class A{ public: int a; A(){ a1 = 1; a2 = 2; a3 = 3; a = 4; } void fun(){ cout << a << endl; //正确 cout << a1 << endl; //正确 cout << a2 << endl; //正确 cout << a3 << endl; //正确 } public: int a1; protected: int a2; private: int a3; }; class B : private A{ public: int a; B(int i){ A(); a = i; } void fun(){ cout << a << endl; //正确,public成员。 cout << a1 << endl; //正确,基类public成员,在派生类中变成了private,可以被派生类访问。 cout << a2 << endl; //正确,基类的protected成员,在派生类中变成了private,可以被派生类访问。 cout << a3 << endl; //错误,基类的private成员不能被派生类访问。 } }; int main(){ B b(10); cout << b.a << endl; //正确。public成员 cout << b.a1 << endl; //错误,private成员不能在类外访问。 cout << b.a2 << endl; //错误, private成员不能在类外访问。 cout << b.a3 << endl; //错误,private成员不能在类外访问。 system("pause"); return 0; }
现在你明白了吗?
引用:深入理解C++中public、protected及private用法:http://www.jb51.net/article/54224.htm
原文地址:https://www.cnblogs.com/pityhero233/p/8146419.html
时间: 2024-10-11 06:50:16