C++访问控制——公有、私有、保护继承
- 格式:wps
- 大小:258.00 KB
- 文档页数:5
填空题1.C++中只用两个逻辑常量:true和:false。
2.#include指令指示编辑器将一个源程序嵌入到到该指令的源文件中。
3.对数组进行升幂排序,反转,复制数组的内容等操作需要包含头文件:<algorithm>.4.如果调用函数时,需要改变实参或者返回多个值,应该采取:传地址值的方式。
5.使用关键字:inline 说明函数是内联函数。
6.C++结构体中的成员默认的访问权限为:public。
7.函数fun的返回值是一个整形数据的引用,有两个参数都是int,声明fun函数的原型是:int &fun(int,int).8.程序需要执行键盘输入时,使用:》提取运算符。
9.C++程序一般可以分为4个部分:程序的主函数,全局说明,:预处理指令和用户自定义的函数。
10.决定C++语言中函数返回类型的是;定义函数时的数据类型。
11.两种重要的程序设计方法,分别是结构化程序设计和:面向对象的程序设计。
12.C++语言支持:引用,实际上就是变量的别名。
13.C++提供了两种格式控制方式,使用ios_base类提供的接口和使用带操作符的特殊函数。
14.在结构体中定义的函数称为:成员函数。
15.在C++标准库中,使用complex类来表示复数。
16.类的继承是指派生类继承基类的数据成员和:成员函数。
17.在STL库中用于查找数组内容的函数是:find。
18.在类定义时,如果没有定义任何构造函数,则编译器自动生成一个:无参数的默认构造函数。
19.析构函数名是在类名前加上:~符号,用来释放对象所占的内存空间。
20.设A为test类的对象且赋有初值,则语句test B(A);表示:用对象A 初始化对象B。
21.静态数据成员初始化时,前面不加:static关键字,以免与一般静态变量或者对象混淆。
22.在类中声明const数据成员时,只能通过:初始化列表的方式来对该成员进行初始化。
23.在建立派生类对象时,先执行:基类的构造函数。
c++private的用法
C++中的private是一种访问控制修饰符,用于限制类的成员只能在类的内部进行访问。
private修饰的成员变量和成员函数只能在类的内部被访问,外部代码无法直接访问。
这种访问控制可以使代码更加安全和可靠。
在C++中,类的默认访问控制是private,也就是说,如果没有显式指定访问控制修饰符,类的所有成员都默认为private。
因此,如果我们需要在类的外部访问某个成员变量或成员函数,需要将其声明为public。
private修饰的成员变量和成员函数通常用于实现类的内部逻辑和细节,隐藏类的实现细节,从而提高代码的可维护性和可读性。
此外,private还可以防止外部代码误操作类的成员,避免出现潜在的问题和安全隐患。
需要注意的是,尽管private修饰的成员无法在类的外部直接访问,但我们仍然可以通过类的公有接口间接访问这些成员。
例如,我们可以在公有成员函数中访问private成员变量,或者在类的友元函数中访问private成员。
因此,private并不是完全的隐私,而是一种限制和保护。
- 1 -。
C常用面试题库1.简述private、protected、public、internal修饰符的访问权限。
答.private:私有成员,在类的内部才可以访问。
protected:保护成员,该类内部和继承类中可以访问。
public:公共成员,完全公开,没有访问限制。
internal:在同一命名空间内可以访问。
2.列举页面之间传递值的几种方式。
答.1.使用QueryString,如....id=1;repone.Redirect()....2.使用Seion变量3.使用Server.Tranfer3.一列数的规则如下:1、1、2、3、5、8、13、21、34......求第30位数是多少,用递归算法实现。
答:publicclaMainCla{publictaticvoidMain(){Conole.WriteLine(Foo(30));}publictaticintFoo(inti){if(i<=0)return0;eleif(i>0&&i<=2)return1;elereturnFoo(i-1)+Foo(i-2);}}4.C#中的委托是什么?事件是不是一种委托?答:委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的引用。
是,是一种特殊的委托5.override与重载的区别答:override与重载的区别。
重载是方法的名称相同。
参数或参数类型不同,进行多次重载以适应不同的需要Override是进行基类中函数的重写。
为了适应需要。
6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Seion、Cookie、Application,您有几种方法进行处理?答:thi.Server.Tranfer7.请编程遍历页面上所有Te某tBo某控件并给它赋值为tring.Empty?答:foreach(Sytem.Window.Form.Controlcontrolinthi.Control){if(controliSytem.Window.Form.Te某tBo某){Sytem.Window.Form.Te某tBo某tb=(Sytem.Window.Form.Te某tBo 某)control;tb.Te某t=String.Empty;}}8.请编程实现一个冒泡排序算法?答:int[]array=newint;inttemp=0;for(inti=0;i<array.Length-1;i++){for(intj=i+1;j<array.Length;j++){if(array[j]<array){temp=array;array=array[j];array[j]=temp;}}}9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?答:不是。
1. 什么是虚基类,并简述其特点。
答:以virtual方式继承基类就是虚基类。
将共同基类设置为虚基类时,从不同路经继承过来的同名数据成员只有一个副本,同一个函数也只有一个映射。
2. 派生类对基类成员的继承方式有哪些?答:公有继承(public),私有继承(private),保护继承(protected)3.C++的作用域有哪几种?答:函数原型作用域,局部作用域,类作用域,文件作用域,命名空间作用域4内联函数的实现?答:内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入每一个调用处。
这样就节省了参数传递、控制转移等开销。
5.什么是函数重载?答:两个以上函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数重载。
6.抽象是什么?答:面向对象方法中的抽象,是指对具体问题进行概括,抽出一类对象的公共性质并加以描述的过程。
对一个问题的抽象应该包括两个方面:数据抽象和行为抽象。
7.封装是什么?答:封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的函数代码进行有机地结合,形成“类”,其中的数据和函数是类的成员。
8.多态性是什么?答:多态性是指一段程序能够处理多种类型对象的能力。
在C++语言中,这种多态性可以通过强制多态,重载多态,类型参数化多态,包含多态四种形式来实现。
9.类是什么?答:类是对逻辑上相关的函数与数据封装,它是对问题的抽象描述。
10.构造函数的作用是什么?答:构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态。
构造函数在对象被创建的时候自动调用。
11.复制构造函数的作用?答:复制构造函数的作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。
而隐含复制构造函数的功能是,把初始值对象的每个数据成员的值都复制到新建立的对象中。
c++对象 protect方法
在C++中,对象的保护方法通常是通过访问控制修饰符来实现的。
C++中的访问控制修饰符包括public、protected和private。
其中,protected修饰符用于限制对类的成员的访问权限,使得只有派生类可以访问这些成员。
当成员被声明为protected时,它们可以在派生类中进行访问,但在类的外部是不可见的。
使用protected修饰符可以实现对象的保护方法,确保某些成员只能在派生类中使用,而不能被外部访问。
这样可以隐藏对象的内部实现细节,同时允许派生类扩展和重用基类的功能。
另外,C++中还可以通过使用友元函数或友元类来实现对象的保护方法。
友元函数或友元类可以访问类的私有成员,从而在一定程度上保护对象的数据,但需要谨慎使用,因为过多地暴露对象的内部实现细节可能会破坏封装性。
总的来说,C++中可以通过访问控制修饰符和友元函数或友元类来实现对象的保护方法,从而确保对象的数据和实现细节不被随意访问和修改,同时允许派生类进行必要的扩展和重用。
【Java】访问控制符:public、protected、缺省、private 1. Java 的访问控制符⽤来声明、控制类、属性和⽅法,以便隐藏类的⼀些实现细节,防⽌对封装数据未经授权的访问和
不合理操作。
2. 实现封装的关键是不让外界直接与对象属性进⾏交互,要通过指定的⽅法操作对象的属性。
Java 的 4 种访问控制符,访问权限由⼩到⼤分别为:
private:被声明为 private 的属性或⽅法,只能在当前类中被访问。
缺省 friendly:若⼀个类、属性或⽅法没有声明任何访问修饰符,可被同⼀包中的其它类访问。
protected:被声明为 protected 的属性或⽅法,既可以被同⼀包中的其他类访问,也可以被不同包中的⼦类访问。
public:被声明为 public 的类、属性或⽅法,可被同⼀包或不同包的所有类访问。
c语言public的用法一、引言在C语言中,public是一个非常重要的访问修饰符,它用于控制类成员的访问权限。
通过正确使用public,可以更好地组织代码、提高代码的可维护性和可扩展性。
本文将详细介绍public的用法,帮助读者更好地掌握C语言中的面向对象编程。
在C语言中,public用于修饰类的成员函数和数据成员。
当一个成员函数或数据成员被声明为public时,它可以在该类的任何其他成员函数和任何其他类中被访问。
这意味着public成员可以被其他类继承和使用,也可以在类的内部直接访问。
三、public的优点和缺点使用public修饰成员函数和数据成员有一些优点和缺点。
优点包括:1.方便子类访问和扩展:通过public修饰的成员可以在子类中被直接访问和修改,方便子类的扩展和修改。
2.提高代码的可读性和可维护性:当一个类中的成员被组织成public时,可以更好地组织代码结构,提高代码的可读性和可维护性。
然而,使用public也存在一些缺点:1.降低了封装性:将成员暴露给其他类,可能会破坏类的封装性,增加代码的耦合度。
2.增加了代码的修改难度:当需要修改public成员时,可能会影响到其他使用该成员的类,增加了代码的修改难度。
四、正确使用public在使用public时,需要注意以下几点:1.适度使用:不要过度使用public,以免破坏类的封装性。
2.考虑继承关系:在将成员声明为public之前,需要考虑继承关系,以避免继承者无法访问该成员。
3.考虑性能:在选择是否使用public时,需要考虑性能因素,以避免不必要的访问和修改。
4.注意数据安全:在使用public修饰数据成员时,需要注意数据的安全性和保密性。
五、示例代码下面是一个简单的示例代码,展示了如何使用public修饰类成员:```c#include<stdio.h>classMyClass{private:intmyData;public:MyClass(intdata):myData(data){}voidsetData(intdata){myData=data;}intgetData(){returnmyData;}};intmain(){MyClassobj;obj.setData(10);printf("Data:%d\n",obj.getData());//输出:Data:10return0;}```在上面的示例中,MyClass类中的myData成员被声明为public,可以在类的任何其他成员函数和任何其他类中被访问。
第一章面向对象第一节类与对象一、类1、类的概念类是对数据的一种抽象,所谓抽象就是将一些事物中不需要的数据剔除,而留下程序需要的。
类的声明声明一个类的语法:class 类名{private://私有的成员public://公有的成员};2、类的成员➢在类中可以声明任意类型的变量,即成员变量,表示这个类的属性。
比如说学生可以有一个整形变量表示id,字符数组表示姓名,浮点型变量表示成绩。
➢在类中可以声明函数,即成员函数,表示这个类的行为。
比如说学生可以有一个print 函数打印自己的成绩。
3、类的定义➢主要是对类中的成员函数进行定义➢定义类成员函数的语法:返回值类型类名::函数名(参数列表){函数体}4、定义类成员函数的注意事项当类成员函数定义在类的外部时,一定要在函数名前加上“类名::”,以引来表示该函数是类的成员函数。
在类的成员函数中可以自由的访问该类的其他成员属性和成员函数。
类成员函数的定义一般写在与头文件对应的.cpp文件中。
二、对象1、对象的概念➢从广义上讲,要在内存上一段有意义的区域就称之为对象。
➢在c++中,对象一般是指类在内存中装载的实例,具有相关的成员变量和成员函数。
类是抽象的概念,而对象是通过类实现的具体实例。
➢比如说,学生是类,学生小明是对象➢对象调用公有成员:可以通过运算符“:”或者“->”访问对象里的公有(public)成员➢this指针:⏹当通过对象调用成员函数传递参数时,会额外将本身的地址做为参数传递进入函数。
比如说我们实际调用成员函数如下:◆tom.introduce();⏹实际上编译器认为的代码是:◆tom.introduce(&tom);2、构造函数和析构函数➢由于对象一定会在内存中占用一段空间,所以一定会有其生命周期。
也就是说对象一定有申请内存空间和释放内存空间的步骤。
➢构造函数是当对象申请内存空间之后自动调用的函数。
➢析构函数是当对象的空间即将被销毁前自动调用的函数2..1、构造函数2.1.1 构造函数声明➢构造函数的声明需要在类中声明。
C++访问控制
在C++中,类之间的继承关系有三种:公有继承、保护继承、私有继承,这三种继承有什么
区别呢,首先看文字说明,然后举例说明:
公有继承:当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类
中不变,而基类的私有成员不可直接访问。也就是说基类的公有成员和保护成员被
继承到派生类中访问属性不变,仍作为派生类的公有成员和保护成员,派生类的其
他成员可以直接访问它们。在类族之外只能通过派生类的对象访问从基类继承的公
有成员。
私有继承:当类的继承方式为私有继承时,基类中的公有成员和保护成员都以私有成员的身
份出现在派生类中,而基类的私有成员在派生类中不可直接访问。也就是说基类的
公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接
访问它们,但是在类族外部通过派生类的对象无法直接访问它们。无论是派生类的
成员还是通过派生类的对象,都无法直接访问从基类继承的私有成员。
保护继承:保护继承中,基类的公有成员和保护成员都以保护成员的身份出现在派生类中,
而基类的私有成员变量不可直接访问。这样,派生类的其他成员就可以直接访问从
基类继承来的公有和保护成员,但在类的外部通过派生类的对象无法直接访问
它们,无论是派生类的成员还是派生类的对象都无法直接访问基类的私有成员。
下面是一道软件设计师考试题:
已知3个类O、P、Q,类O中定义了一个私有方法F1、一个公有方法F2和一个保护的方
法F3;类P和类Q是类O的派生类,其继承方式如下所示:
class P: protected O{...}
class Q: public O{...}
关于方法F1的描述正确的是(B)
A、方法F1无法被访问
B、只有在类O内才能访问方法F1
C、只有在类P内才能访问方法F1
D、只有在类Q内才能访问方法F1
关于方法F2的描述正确的是(C)
A、类O、P、Q的对象都可以访问方法F2
B、类P和Q的对象都可以访问方法F2
C、类O和Q的对象都可以访问方法F2
D、只有在类P内才能访问方法F2
关于方法F3的描述正确的是(B)
A、类O、P、Q的对象都可以访问方法F3
B、类O、P、Q的对象都不可以访问方法F3
C、类O和Q的对象都可以访问方法F3
D、类P和Q的对象都可以访问方法F3
我们按照题意编写如下代码(其中增加了一个私有继承的类R):
#include
using namespace std;
//在类O中分别定义了三个不同访问类型的函数
class O{
public:
void F2();
private:
void F1();
protected:
void F3();
};
//类P保护继承于O
class P:protected O{
};
//类Q公有继承于O
class Q:public O{
};
//类R私有继承于O
class R:private O{
};
void O::F1()
{
cout<<"this is O's private function F1"<
void O::F2()
{
cout<<"this is O's public function F2"<
void O::F3()
{
cout<<"this is O's protected function F3"<
//主函数
void main()
{
//下面用各个类的对象分别访问三个方法
O o;
P p;
Q q;
R r;
o.F1();//①
o.F2();
o.F3();//②
p.F1();//③
p.F2();//④
p.F3();//⑤
q.F1();//⑥
q.F2();
q.F3();//⑦
r.F1();//⑧
r.F2();//⑨
r.F3();//⑩
}
编译后报错如下:
以上一共有10处错误,从上到下一次对应①——⑩,可以看出,如果用类的对象访问基类
中的不同访问权限的方法时,只有基类O的对象o可以访问其本身的公有方法F2,派生类
中,只有公有继承的类Q的对象q可以访问基类的公有方法F2,其余类的对象都无法访问
基类的三个方法。
下面修改上面的代码,通过类内部去访问基类的不同权限的方法,代码如下:
注意:添加注释的地方为编译出错的地方。
#include
using namespace std;
//在类O中分别定义了三个不同访问类型的函数
class O{
public:
void F2();
private:
void F1();
protected:
void F3();
};
//类P保护继承于O
class P:protected O{
public:
/*
void test_F1()
{
F1();
}
*/
void test_F2()
{
F2();
}
void test_F3()
{
F3();
}
};
//类Q公有继承于O
class Q:public O{
public:
/*
void test_F1()
{
F1();
}
*/
void test_F2()
{
F2();
}
void test_F3()
{
F3();
}
};
//类R私有继承于O
class R:private O{
public:
/*
void test_F1()
{
F1();
}
*/
void test_F2()
{
F2();
}
void test_F3()
{
F3();
}
};
void O::F1()
{
cout<<"this is O's private function F1"<
void O::F2()
{
cout<<"this is O's public function F2"<
void O::F3()
{
cout<<"this is O's protected function F3"<
//主函数
void main()
{
P p;
Q q;
R r;
// p.test_F1();
p.test_F2();
p.test_F3();
// q.test_F1();
q.test_F2();
q.test_F3();
// r.test_F1();
r.test_F2();
r.test_F3();
}
根据以上的代码,可以看出,不论是公有继承、私有继承还是保护继承,派生类的内部和外
部都不能直接访问基类的私有成员,但是派生类内部可以访问基类的公有和保护类成员。