C++基础

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)这种技术很多用在比如定


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值