1. 不做特别说明,类的数据成员和成员函数都被认为是private 如: class lamp { int number; void display(); public: void lower(); }; 其中 ,number display()为私有,lower 为公有
2. private, public, protected 访问标号的访问范围。
private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。
protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。
public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。
3. 继承时权限
此段摘自 https://blog.youkuaiyun.com/hemmingway/article/details/7858828
当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定。
3.1 如果子类从父类继承时使用的继承限定符是public,那么(1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员;(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;(3)父类的protected成员成为子类的protected成员,只允许子类成员访问;
3.2 如果子类从父类继承时使用的继承限定符是protected,那么
(1)父类的public成员成为子类的protected成员,只允许子类成员访问;(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;(3)父类的protected成员成为子类的protected成员,只允许子类成员访问
3.3 如果子类从父类继承时使用的继承限定符是private,那么
(1)父类的public成员成为子类的private成员,只允许子类成员访问;(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;(3)父类的protected成员成为子类的private成员,只允许子类成员访问;
4. 1友元与继承
友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员。
class Person
{
friend void Display(Person &p , Student&s);
protected :
string _name ;
};
class Student: public Person
{
protected :
int _stuNum ;
};
void Display(Person &p , Student &s)
{
cout<<p._name<<endl;
cout<<s._name<<endl;
cout<<s._stuNum<<endl; //error,这样有问题的
}
int main()
{
Person p;
Student s;
Display (p, s);
return 0;
}
4.2 继承与静态成员
基类定义了static成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子类,都只有一个static成员实例。
5.1 什么是重载函数
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的
形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。函数定义为:
1.函数名相同
2.参数不同
a.参数个数不同。//这个大家都理解就不要解释了
b.参数类型不同。//如:inta(charc)和inta(int c)就是指参数不同,但是这也是重载函数。
c.参数顺序不同。//如:inta(int a,char b)和inta(char a,int b)就是顺序不同但是却是重载函数,从数学角度说就是组合相同(他们都是int,char组成),但是排列不同的参数能实现函数重载。
5.2 那么函数的返回类型不同函数可以重载吗?
答:对,满足上述条件就是重载函数,返回类型不同也可以重载。
6. this
this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
所谓当前对象,是指正在使用的对象。例如对于stu.show();,stu 就是当前对象,this 就指向 stu。
this 只能用在类的内部,通过 this 可以访问类的所有成员,包括 private、protected、public 属性的。
7. 1 & 引用非指针变量
void demo1(int a, int b);
void demo2(int &a, int &b);
void main (){
int age = 25,weight= 120;
demo(age ,weight); //demo里修改不会改变age ,weight
demo(&age ,&weight); //demo里修改的话,age weight也跟着变
}
7.2 &引用指针变量
引用经常被用作函数参数,使得函数中的变量名成为调用程序中的变量别名。这种传递参数 的方法称为按引用传递。按引用传递允许被调用的函数能够访问调用函数中的变量。
1) void foo(int* ptr); //传值调用 int a; int* pValue = &a; foo(pValue); 其中,pValue的值不能被函数foo改变的,即pValue指向a 但是加入foo函数里*pte = 3;那这块内存a 的值还是会变成3的。
2)但是如果是
void foo(int*& ptr); //传递引用
void foo(int*& ptr)
{
ptr = NULL;
}
foo(&pValue)调用过后,pValue就变成了NULL。而第一种情况pValue不能被改变。引用是C++重要特性之一,在大多数情况下避免了使用指针。在C++中,引用不可捏造,比如C你可以很容易弄一个NULL的指针,而引用不存在NULL引用。上述foo函数要用C来实现,则要用指针的指针:void foo(int** pptr){ *ptr = NULL;}调用时要foo(&pValue)这种技术很多用在比如定
5103

被折叠的 条评论
为什么被折叠?



