C++ 类和数据抽象

● 请你来说一下C++中类成员的访问权限

参考回答:C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。
Java、C# 程序员注意:
C++ 中的 public、private、protected 只能修饰类的成员,不能修饰类,C++中的类没有共有私有之分

在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员

private,public,protected方法的访问范围.(public继承下)

  • private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.
  • protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
  • public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问

注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数

A.在无继承的情况下,类内部可以随意访问,即使是private;类外部无法访问protected/private成员 .

B.在有继承的情况下,

   (先确定类继承方式,

    再确定继承后子类的新成员属性,

    最后确定子类内部/外部的访问权限:!!!此时即使是在子类的内部也不能访问父类的private

     )

1.若是public继承的话,父类的public/protected/private属性继承到子类时,均不会变化(新成员)

          在子类内部访问时,无法访问父类的private(对比:在无继承时,类内可随便访问)

          在子类外部访问时,无法访问子类的新成员protected/private

2.若是protected继承的话,父类的public/protected/private属性继承到子类时,会变化为(新成员)protected/protected/private

          在子类内部访问时,无法访问父类的private(对比:在无继承时,类内可随便访问)

          在子类外部访问时,无法访问子类的新成员protected/private

3.若是private继承的话,父类的public/protected/private属性继承到子类时,会变化为(新成员)private/private/private

          在子类内部访问时,无法访问父类的private(对比:在无继承时,类内可随便访问)

          在子类外部访问时,无法访问子类的新成员protected/private

在这里插入图片描述

● 请你来说一下C++中struct和class的区别

参考回答:
在C++中,可以用struct和class定义类,都可以继承。区别在于:struct的默认继承权限和默认访问权限是public,而class的默认继承权限和默认访问权限是private。
另外,class还可以定义模板类形参,比如template <class T, int i>。

● 请你回答一下C++类内可以定义引用数据成员吗?

参考回答:
可以,必须通过成员函数初始化列表初始化。

#include
using std::cout;
using std::endl;
class A{
public:
A(int &b):a(b){}
int &a;
};
int main()
{
int b = 10;
A a(b);
cout << a.a <<endl;
return 0;
}

Guess you like

Origin blog.csdn.net/weixin_44576259/article/details/120464593