C++类成员的访问权限
学堂在线《面向对象程序设计C++》习题
学堂在线《面向对象程序设计C++》习题(作业部分)作业一多选题(2分)C++源程序不能直接运行,需要经过如下哪些步骤,才能得到可以运行的程序?A.编译器B.链接器C.汇编器D.编辑器正确答案:AB判断题(1分)C++源程序必须使用两个以上的文件来存放,才能编译链接成可执行程序。
正确答案:×多选题(2分)关于main()函数的参数,以下说法正确的是A.不使用参数也是允许的B.若带参数,则第一个参数是整数类型C.若带参数,则第二个参数是字符串数组D.参数名称只能使用argc和argv正确答案:ABC多选题(2分)为防止头文件重复包含,以下书写错误的是A.错误B.错误C.错误D.错误正确答案:ABCD作业二多选题(2分)下列哪些语句可以完成对数组的初始化A.char name[10] = "THU OOP";B.char course[4] {'O', 'O', 'P'};C.int year[5] {2016, 2017, 2018};D.int score[] = {60, 80, 90};正确答案:ABCD多选题(2分)下列哪些写法不正确A.int* ptr = new int;B.int* ptr = new int(3);C.int * ptr = new int[3];D.int* ptr = new int{3};E.int* ptr = new[] int;F.int ** ptr = new int[4][5];正确答案:EF多选题(2分)下列关于for循环语句的写法,正确的是:A.第1句B.第2句C.第3句D.第4句正确答案:ABCD判断题(1分)函数重载时,函数名必须一样,函数参数必须不同,至于函数返回值类型,则没有限定。
正确答案:√单选题(1分)以下关于函数参数缺省值的说法,正确的是:A.当有多个函数参数时,任意一个都可以设置缺省值B.若只有一个参数,则不能设置缺省值C.只有整数参数才能设置缺省值D.仅允许从函数参数列表的最后一个开始依次设置缺省值(一个或多个)正确答案:D判断题(1分)函数返回类型,既可以放在函数名前面(左边),也可以使用追踪返回类型的语法放到函数名的后面(右边)正确答案:√多选题(2分)关于类成员的访问权限,以下说法正确的是:A.访问权限可以成组设置B.相同权限的成员,可以共用一个权限设置C.同一权限说明不能出现多次D.private必须在public之前出现正确答案:AB单选题(1分)下列关于私有成员的说法,正确的是A.即使是类的成员函数,也不能访问私有成员B.对象通过成员操作符,是可以访问自己隐藏的私有成员的C.私有数据只能被私有成员函数访问,不能被公有成员函数访问D.私有数据成员不能与公有数据成员同名正确答案:D多选题(2分)关于类的成员函数定义,以下说法正确的是:A.既可以放在类中定义,也可以放在类外定义B.在类外定义时,函数名前要加”类名::“进行限定C.只有私有成员函数才能在类中进行定义D.私有成员函数只能在定中进行定义正确答案:AB判断题(1分)所谓this指针,只是一种概念,是为了帮助我们理解类的运作方式而引入的,实际上在成员函数的参数列表中并没有这种变量被传入。
C++程序设计上机选择题
C++程序设计试题(上)试卷(卷面60分)(考试用时90分钟)一、选择题(每题1分,共5分)1.对于面向对象的程序设计(OOP)和过程性(SP)的程序设计,那些说法是正确的。
A.面向对象的程序设计和过程性程序设计是两个独立的程序设计范型。
B.面向对象的程序设计和过程性程序设计不是两个独立的程序设计范型,前者包含后者。
将两者分开并列是不妥的。
C.面向对象是编程的总体框架,而过程性是编写解决具体问题的程序段的工具。
D.面向对象只是一种语法现象,而过程性程序设计才是编程的工具。
2.下面有关函数调用的说法哪一个是错误的。
A.实参与形参的数目要求必须是相同的。
B.实参与形参的对应关系取决于位置而不是名字。
C.实参与对应的形参应类型匹配,即实参的类型可以转化为形参类型。
D.C++有两种调用方式:传值与引用。
3.C++中表示字符A的正确方法是。
A.’\65’ B.”A” C.65 D.’A’4.有关函数重载的要求哪一个是正确的。
A.必须保证参数类型和返回值类型均不同。
B.必须保证返回值类型不同。
C.必须保证参数的数量不同。
D.必须保证参数类型或数量不同。
5.下列有关枚举类型的说明哪些是错误的?A.枚举常量(或称枚举成员)是以标识符形式表示的整型量。
B.默认状态下,这个整数就是所列举元素的序号,序号从0开始。
C.类型定义时可以为部分或全部枚举常量指定整数值,其余的枚举常量仍按默认方式取值。
D.各枚举常量的值可以重复,但各枚举常量标识符必须不同。
C++程序设计试题(上)参考答案:一、选择题(每题1分,共5分):1.B.C.2.A.3.D.4.D.5.C.C++程序设计试题(下)试卷(卷面60分)(考试用时100分钟)一、选择题(每题1分,共5分)1.设计一个自定义类时,需要在屏幕上显示或向文件写入类对象的数据,最佳选择方法是。
A.为屏幕显示和文件写入各自设计一个成员函数。
B.为屏幕显示和文件写入统一设计一个成员函数。
填空题
1.(分值:0.3)在面向过程的程序设计中,程序功能模块由函数实现;在面向对象的程序设计中,程序模块由类实现。
2.(分值:0.3)在C++中定义类时,通常用数据成员描述对象的特征,利用成员函数(方法)描述对象的行为或功能。
3.(分值:0.3)有如下循环语句:for(int i=50; i>20; i-=2) cout<<i<<',';运行时循环体的执行次数是15次。
4.(分值:0.3)关系运算符、逻辑运算符和算术运算符的计算次序为:先算术运算符再关系运算符最后逻辑运算符。
5.(分值:0.3)可存储小数的基本数据类型为单精度实型或float和双精度实型。
6.(分值:0.3)变量的基本类型有整型、实型、字符型和枚举型。
7.(分值:0.3)VC++源程序文件的扩展名为cpp或.cpp,可执行程序的扩展名为exe。
8.(分值:0.3)字符和字符串常数的定界符分别为单引号和双引号(")。
(注意:使用中文答案)9.(分值:0.3)Visual C++6.0的集成开发环境(IDE)集编辑、编译、链接和调试运行于一体。
10.(分值:0.3)当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化。
11.(分值:0.3)如果不做特殊说明,类成员的默认访问权限是私有或private。
12.(分值:0.3)当一个对象的生命周期结束时,C++编译系统自动调用析构函数撤销该对象并进行清理工作。
13.(分值:0.3)设有如下程序结构:class Box{R-};void main(){Box A,B,C; }该程序运行时调用3次构造函数。
14.(分值:0.3)在C++类的定义中,利用属性或数据成员描述对象的特征。
15.(分值:0.3)在C++类的定义中,利用成员函数描述对象的行为。
16.(分值:0.3)类是对象的抽象,而对象则是类的具体实例。
17.(分值:0.3)类的成员按访问权限可分为3类,分别是public、private、protected。
C++试题(附答案)
C++试题(附答案)一、选择题1.在下列有关析构函数的描述中,错误的是(B)A.一个类中只能定义一个析构函数B.析构函数名与类名完全相同C.析构函数不能指定返回类型 D.析构函数不能带有参数2.面向对象的软件工程不包括以下哪个部分(D)A.面向对象程序设计B.面向对象编程C.面向对象维护D.面向对象封装3.假设定义了函数模版:TemplateT max(Tx,Ty) {return (x>y)? x:y;}并定义了:int i;char c;那么下列错误的调用该模版的事(C)A.max (i,i) B.max(c,c) C.max(int(c),i) D.max(c,i)4.模版的主要作用是为了(C)A.提高代码的运行效率B.实现多态性C.提高代码的重要性D.加强类的封装性5.#include#includeusing namespace std;{double x=111.222222222222222;cout<<setiosflags(ios::scientific)<<setprecision(5)<<x<<en dl;< p="">return 0;}以上程序的运行结果是(C)A.111.22 B.111.22222 C.1.11222e+002 D.1.11222E+002 6.下列特性中不是面向对象程序设计语言所特有的是(D)。
(A)数据封装(B)继承(C)多态性(D)模板7.类成员的访问权限中,(C)只能被本类的成员函数和其友元函数访问。
(A)share (B)public (C)private (D)protected8.派生类可以访问其基类的(D)(A)公有成员(B)保护成员(C)私有派生(D)共有和保护成员9.c++中声明常量的关键字是(A)。
(A)const (B)extern (C)public(D)enum10.应在下列程序划线处填入的正确语句是(C)#include{public:void fun (){cout<<”Base::fun”<<endl;}< p="">};Class Derived:public Base{void fun (){__________________________ //显示调用基类的函数fun()Cout<<”Derived::fun”<<endl;< p="">}};(A)fun(); (B)Base.fun(); (C)Base::fun();(D)Base->fun();11.下面有关类的叙述中,不正确的是(C)。
c++课后习题解答6-10
};
int S::IsMemberOf(int n)
{
for(int i=0;i<PC;i++)
if(elems[i]==n)
return 1;
return 0;
}
int S::Add(int n)
{
if(IsMemberOf(n))
return 1;
else if(PC==100)
√24.友元类中的所有成员函数都是友元函数。
√25.类型转换函数是一种特殊的成员函数,定义时不加类型说明,无函数参数。
√26.单参数的构造函数具有类型转换的作用。
6.2单选题
1.下列关于类的定义格式的描述中,错误的是(C)。
A.类中成员有3种访问权限
B.类的定义可分说明部分和实现部分
C.类中成员函数都是公有的,数据成员都是私有的
答:编程如下:
#include <iostream.h>
class ASMD
{
public:
ASMD(double a,double b)
{ x=a; y=b; }
void Addition()
{ cout<<x+y<<endl; }
void Subtration()
{ cout<<x-y<<endl; }
a.Print();
b.Print();
}
答:Default constructor called.
Constructor called.
a1=0,a2=0
a1=5,a2=8
Destructor called.
成员函数中访问对象的私有成员问题
问题(知识点)描述:a.在C++的类的成员函数中,允许直接访问该类的对象的私有成员变量。
b.在类的成员函数中可以访问同类型实例的私有变量。
c.拷贝构造函数里,可以直接访问另外一个同类对象(引用)的私有成员。
d.类的成员函数可以直接访问作为其参数的同类型对象的私有成员。
举例描述上述知识:1).在拷贝构造函数中可以访问引用对象的私有变量:例如:class Point{public:Point(int xx=0,int yy=0){X=xx;Y=yy;}Point(Point &p);private:int X,Y;};Point::Point (Point &p){X=p.X;Y=p.Y;}2).在类的成员函数中可以访问同类型实例的私有变量class A{public:int getA() const { return a; }void setA(int val) { a = val; }void assign(A& _AA){this->a = _AA.a;_ AA.a = 10; //可以直接访问}void display(){cout<<"a:"<<a<<endl;}private:int a;};3).#include <iostream>using namespace std;class TestClass{public:TestClass(int amount){this->_amount = amount;}void UsePrivateMember(){cout<<"amount:"<<this->_amount<<endl;/*----------------------*/TestClass objTc(10);objTc._amount = 15; //访问同类型实例的私有变量cout<<objTc._amount<<endl;/*----------------------*/}private:int _amount;};int main(){TestClass tc(5);ePrivateMember();return(0);}关于该问题(知识点)的讨论和或解释:1.私有是为了实现“对外”的信息隐藏,或者说保护,在类自己内部,有必要禁止私有变量的直接访问吗?难道还要让我们声明一个类为自身的友元?Point::Point(Point &p){X=p.X; //这在Point类中的Point函数内,所以没错。
C++中类继承public,protected和private关键字作用详解及派生类的访问权限
C++中类继承public,protected和private关键字作⽤详解及派⽣类的访问权限注意:本⽂有时候会⽤Visual Studio Code⾥插件的⾃动补全功能来展⽰访问权限的范围(当且仅当⾃动补全范围等价于对象访问权限范围的时候),但是不代表⽇常使⽤时只要是出现在⾃动补全范围内的可调⽤对象/成员都是可访问的。
⼀,公有继承#include<cstdio>#include<iostream>#include<string>#include<algorithm>#include<vector>class Base{public:int PublicBase;void PublicPrint() {std::cout << "PublicPrint()" << std::endl;}protected:int ProtectedBase;void ProtectedPrint() {std::cout << "ProtectedPrint()" << std::endl;}private:int PrivateBase;void PrivatePrint() {std::cout << "PrivatePrint()" << std::endl;}};class Derived : public Base{public:void DerivedPrint() {std::cout << "DerivedPrint()" << std::endl;std::cout << ProtectedBase << std::endl;//若要访问protected的数据成员需要通过派⽣类⾥的成员函数访问PublicPrint();ProtectedPrint();}};int main(void){Derived der;der.PublicPrint();der.PublicBase;//der.ProtectedBase; //不能直接访问protected数据成员//der.ProtectedPrint();//意思同上return0;} 公有继承的派⽣类可以直接访问基类的public中的数据成员和成员函数,不能直接访问protected中的数据成员和成员函数,若要访问protected的数据成员需要通过派⽣类⾥的成员函数访问。
c语言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,可以在类的任何其他成员函数和任何其他类中被访问。
C++试题及答案5
选择填空:(每题1分,共10分)1.已知各变量的类型说明如下:int a=1;double x=1.42;char ch;则以下不符合C++语言语法的表达式是CA、a+=0x123fdB、x=12e-8C、ch=“x”D、ch=‘\a\’2.下面D是死循环。
A、for(i=0;i<10;i++)cout<<i<<"";B、for(i=10;i>=1;i--)cout<<i<<"";C、i=10;do{cout<<i--<<"";}while(i>0);D、i=0;while(i<=10);cout<<++i<<"";3.C++语言的跳转语句中,对于break和continue说法正确的是C:A、break语句只应用于循环体中B、continue语句用于跳出循环语句C、continue语句用于跳出当前的循环周期D、break语句用于跳出当前的循环周期4.有如下定义语句:int a[]={1,2,3,4,5};,则对语句int*p=a;正确的描述是B。
A、语句int*p=a;定义不正确B、语句int*p=a;初始化变量p,使其指向数组对象a的第一个元素C、语句int*p=a;是把数组a的值赋给变量pD、语句int*p=a;是把a[0]的值赋给变量p5若有以下定义和语句,则合法的表示是Cchar a[]=”abcdefg”;char*p=a;A、变量p和变量a是等价的B、数组a的长度是7C、p[7]的值是’\0’D、a[7]的值是‘0’6下列语句正确的是AA char a[2]={’a’};B char3a=’\0’;C char a[]='abc';D char a="\0";7、ch为char类型,判断ch为小写字符的表达式是C。
c++类的定义及类成员的访问控制
c++类的定义及类成员的访问控制类的定义在c++中,类的定义⽅法如下class类名{访问范围说明符:成员变量1成员变量2成员函数声明1成员函数声明2访问范围说明符:更多成员变量更多成员函数声明...};类的定义要以;结束。
类的基本思想是数据抽象和封装。
数据抽象是⼀种把接⼝和实现分离的编程技术。
类的接⼝包括⽤户所能够执⾏的操作,类的实现包括类的数据成员、负责接⼝实现的函数体和各种私有函数。
封装实现了类的接⼝和实现的分离。
封装隐藏了类的实现,封装过后,⽤户只能访问类的接⼝,⽽不能访问类的实现。
类是⼀种将抽象转换为⽤户定义类型的C++⼯具,它将数据表⽰和操纵数据的⽅法组合成⼀个整体。
例如⼀个⽇常⽣活时间类,时间对象有两个属性,⼩时和分钟,根据需要应该能够对每个⽇常事务所花的时间进⾏操作和显⽰。
操作和显⽰就需要类的接⼝函数。
⼀般的类由两部分组成:1.类声明:以数据成员的⽅式描述数据部分,以成员函数(被称为⽅法)的⽅式描述接⼝函数。
2.类⽅法定义:描述如何实现类成员函数。
简单地说,类声明给出了类的框架,⽽⽅法定义给出了类的细节。
类成员的访问控制在定义⼀个类时可以规定外界对其成员的访问权限,访问权限的含义如下:(1)public(公有的):公有成员可被与该类对象处在同⼀作⽤域内的任何函数访问。
(2)private(私有的):私有成员只能被类中的成员函数及该类的友元函数访问。
(3)protected(保护的):保护成员只能被类中成员或其派⽣类的成员函数或该类的友元函数访问。
#include <iostream>using namespace std;class Time{private:int day;int month;int get_numbers;public:Time(); //默认构造函数Time(int h, int m = 0); //显式构造函数Time(const Time &); //拷贝构造函数~Time(); //析构函数//------展⽰函数show() //在const函数中不可调⽤⾮const函数成员void Time::show() const{cout << "month:" << month<< "" << "day:" << day<< ""<<endl;}};注:类的成员默认是私有的,⽽结构体成员则默认是公有的成员函数定义的时候,也可以将函数的实现写进类声明的头⽂件中,但是⼀定要添加inline关键字。
c++复习题及答案
1、填空题()多态分为:专用多态和通用多态。
2、选择题(10分)下面对构造函数的描述不正确的是(C )A 可以重载B 其名字与类名相同C 可以显式调用构造函数D 构造函数是成员函数E 构造函数不能是虚函数3、判断题(正确的请写T,错误的请写F)(20分)静态成员函数可以直接调用类中说明的非静态成员。
(F)windows应用程序采用基于消息的事件驱动运行机制。
(T)(一)填空题在类体内使用关键字(static )说明的成员称为静态成员。
2、重载的函数要求参数的(个数)和(类型)不同。
3、如果要表示某个变量的值不能修改,用修饰符(const )限制。
4、对函数int fun( int x,int y) 中的参数x指定默认值10 正确的声明方式是(int fun(int y,int x=10) )。
5、C++语言规定,成员函数如果被定义在类体内,则为默认为(内联成员函数)。
6、在类层次结构中,创建子类对象时,(派生类)构造函数最后被执行。
7、C++规定,运行多态性通过(基)类的指针或者(引用)调用(虚函数)来实现。
8、派生类的生成过程经历了三个步骤:(吸收基类成员)、(改造基类成员)和(添加新的成员)。
9、面向对象程序设计的4个基本特征是(抽象)、(继承)、(封装)、(多态)。
10、Windows应用程序采用基于(消息)的事件驱动运行机制。
11、通常将用来派生新类的类称为(基类),又称为父类,而将派生出来的新类称为(派生类),又称为子类。
12、含有(纯虚)函数的类称为抽象类。
13、引用与被引用的实体具有相同的(地址)。
14、类成员的访问权限有3种(共有类型)、(私有类型)、(保护类型)。
15、通过函数改变实参的数据,c++ 可以通过( 指针)或者(引用)实现。
16、c++通过(函数重载)实现静态多态性,其(形参个数或类型)必须不同。
18、c++类的用途有两种,一种是生成类的对象,另一种是通过(继承)派生出新类。
C++程序设计自考题模拟15_真题(含答案与解析)-交互
C++程序设计自考题模拟15(总分100, 做题时间90分钟)第Ⅰ部分选择题一、单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的。
1.下列不可以作为C++标识符使用的是______SSS_SINGLE_SELA usradfB _jsdhC WhileD 6hole分值: 1答案:D[考点] C++标识符[解析] C++标识符以大小写字母或下画线开始,由大小写字母、下划线、数字组成。
所以D选项以数字开头是错误的。
2.C++相对C语言重大改进之一,即从面向过程变成为面向对象,其主要原因是______SSS_SINGLE_SELA 允许函数重载,并允许设置默认参数B 规定函数说明符必须用原型C 增加了一些新的运算符D 引进了类和对象的概念分值: 1答案:D[考点] 面向过程和面向对象[解析] C语言是结构化程序设计语言,有优有劣,C++是混合型语言,面向对象方法更彻底实现了结构化程序设计的思想。
3.C++预处理语句不包括______SSS_SINGLE_SELA 宏定义B 文件包含C 条件编译D 命名空间分值: 1答案:D[考点] C++预处理程序[解析] C++预处理语句有三种,分别是宏定义、文件包含、条件编译。
4.下列指针的定义和使用中,错误的是______SSS_SINGLE_SELA int i; int*ptr=&i;B int i; int*ptr; i=*ptr;C int*ptr; ptr=0;D int i=5; int*ptr; *ptr=i;分值: 1答案:B[考点] 动态分配内存[解析] A选项定义变量i,并将i的地址赋给指针ptr,使其执行变量i的内存。
B项,定义了变量i和指针ptr,指针未初始化就使用,所以有误。
C项,定义了指针ptr,并使其指向内存地址赋值为0;D项,定义了指针ptr,变量i并进行初始化,将i值赋给指针指向的内存。
5.使用指针时,用户给它分配地址使用的关键字是______SSS_SINGLE_SELA newB deleteC externD auto分值: 1答案:A[考点] C++动态分配内存[解析] 在使用指针时,如果不使用对象地址初始化指针,用户可以自己给它分配地址,申请方式如下:new类型名[size];6.在类定义中,prirate、protected、public关键词可以出现的次数为______ SSS_SINGLE_SELA 任意多次B public至少出现一次C 至多一次D 至少一次分值: 1答案:A[考点] 类成员的访问权限[解析] 访问权限可以反复使用,只不过经常把同一种访问权限的成员放在一起。
c++面向对象程序设计试题和答案(经典题目)
系名____________班级____________姓名____________学号____________密封线内不答题一、 填空题(每空1分,共14分)1、 观看以下程序:class point {public:void show() {cout<〈”point"〈〈endl;} }; void main () { point p1; point *p ; p=&p1; ______p1。
show ()_________//通过对象p1访问show 函数 _______p 。
show()_______//通过指针p 访问show 函数 } 2、 在C++类中可以包含___公共___、___保护_____和___私有__三种具有不同访问控制权的成员。
3、 定义类时,在类头中将使用关键字__class _____来表示类定义的开始。
4、 如果一个类中至少有一个纯虚函数,则该类称为_______抽象类_________。
5、 C++类的组成包括数据成员和______成员函数________,友元__是___(是、不是)该类的成员函数. 6、 友员函数是用关键字_____friend_______修饰的非成员函数. 7、 若有: int i; int &j=i; i=10; j=i+1; 则i=____11_____,j=___11______。
8、 new 的功能是_______分配内存空间______,delete 的功能是______释放内存空间______________.二、 选择题(每小题1。
5分,共30分)1、下列特性中不是面向对象程序设计语言所特有的是( D ).(A)数据封装 (B )继承(C)多态性 (D )模板2、( B )是给变量取一个别名,它引入了变量的同意词。
(A)指针(B)引用(C)枚举(D)结构3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问.(A)share (B)public (C)private (D)protected4、关于构造函数,下列说法不正确的是( )。
C#基础题
ing E.Quit
三、程序题
1、using System;
class A
{
public A(){
PrintFields();
}
public virtual void PrintFields(){}
readonly关键字与count关键字的不同:const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数。
readonly 只能在声明时或者构造函数里面初始化,并且不能在 static 修饰的构造函数里面。
16、 值类型和引用类型的区别?
值类型:单元直接存放有效值。如:int I = 3; 则I内存单元就存放3。
引用类型:单元放的是另外一个对象的引用(地址)。如:Form form1=new Form();就是说在内存中开辟了一个对象new Form(),form1内存单元存放的就是那个对象的地址,并非对象本身。
18、情叙述count与readonly的区别
每一个类之多只可以定义一个static构造函数,并且不运行增加访问级别关键字,参数必须为空。
为了不违背编码规则,通常把static成员声明为private,然后通过static property提供读写访问。
count关键字用于修改字段或局部变量的声明。它制定字段或局部变量的值不能被修改。常数声明引入给的类型的一个或多个常数。
4、 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义
C++在线作业答案,完全正确中南大学在线测试
(C)
没有详解信息!
23. 下列while循环的次数是。while (int I=0) I--; ( )
(A) 0
(B) 1
(C) 5
(D) 无限
参考答案:
(A)
没有详解信息!
24. 下列for循环的次数为( )。for (int I=0,x=0;!x && I<=5;I++)
参考答案:
(C)
没有详解信息!
34. 关于逻辑运算符的说法正确的是( )。
(A) 它们都是双目运算符,优先级相同
(B) 语句“int a=0,c=1,b;b=a&&c++;” 执行后,c 的值为2
(C) 语句“int a=1,c=1,b;b=a||c++;” 执行后,c 的值为2
(C)
没有详解信息!
5. 如果有以下语句:int a,b; char m,n; cin>>a>>b>>m>>n;则下列输入数据的方式中正确的是( )。
(A) 10,20,X,Y
(B) 1020 XY
(C) 10 20 X Y
(D) 10、20、X、Y
参考答案:
(B)
没有详解信息!
27. 下面循环体的执行次数为( )。 for(int a=0,b=5;a<=b+1;a+=2,b--) cout<<a<<endl;
(A) 3
(B) 2
(C) 1
(D) 0
参考答案:
(D) do-while语句构成的循环,当while语句中的表达式值为零时结束循环
c类与结构体的异同
c类与结构体的异同C类和结构体是计算机编程中常用的概念,它们虽然有一些相似之处,但也存在一些明显的差异。
在本文中,我们将对C类和结构体的异同进行详细分析。
一、定义和声明方式的异同:1. C类的定义和声明方式:C类是面向对象编程中的一个重要概念,它可以包含数据成员和成员函数。
在C语言中,可以使用结构体来模拟类的概念,通过在结构体中定义函数指针来实现成员函数的功能。
2. 结构体的定义和声明方式:结构体是一种用户自定义的数据类型,它可以包含不同类型的数据成员。
在C语言中,可以使用关键字"struct"来定义和声明结构体。
二、数据成员的异同:1. C类的数据成员:C类的数据成员可以是任何合法的数据类型,包括基本数据类型、指针、数组等。
数据成员可以通过访问控制符(如public、private、protected)来定义其访问权限。
2. 结构体的数据成员:结构体的数据成员也可以是任何合法的数据类型,包括基本数据类型、指针、数组等。
结构体的数据成员没有访问控制符,所有成员都是公开的,可以直接访问。
三、成员函数的异同:1. C类的成员函数:C类的成员函数是类的一部分,可以直接访问类的数据成员。
成员函数可以在类的内部定义和实现,也可以在类的外部定义和实现。
2. 结构体的成员函数:结构体不能直接定义成员函数,但可以在结构体中定义函数指针。
通过函数指针,可以在结构体的外部实现函数,并且通过函数指针调用。
四、内存分配的异同:1. C类的内存分配:C类的对象在创建时会自动分配内存空间,对象的大小取决于类的数据成员和成员函数的大小。
可以使用new关键字来动态分配内存,使用delete关键字来释放内存。
2. 结构体的内存分配:结构体的对象在创建时会自动分配内存空间,对象的大小取决于结构体的数据成员的大小。
结构体的内存分配是静态的,不需要使用new和delete关键字。
五、应用场景的异同:1. C类的应用场景:C类常用于面向对象编程,适用于需要封装数据和行为的场景。
c++单项选择题
单项选择题1.C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是。
A.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C.规定函数说明符必须用原型D.引进了类和对象的概念2.任意一个类,析构函数的个数最多是。
A.不限个数B.1 C.2 D.33.下列关于this指针的说法,哪个是正确的。
A.this指针一定指向常量型数据B.this指向的数据不可更改C.静态成员函数中也可以访问this指针D.this指针本身可直接作为成员函数的返回值4.在类定义中,为说明成员的访问权限,private,protected,public 可以出现次数为。
A.次数没有具体限定B.每种至多一次C.public 至少一次D.每种至少一次5. 类的析构函数是在。
A.创建类时调用的B.创建对象时调用的C.删除对象时调用的D.不自动调用6. 假定AB为一个类,则该类的拷贝构造函数的原型为。
A.AB &(AB x); B.AB(AB x);C.AB(AB &x); D.AB(AB *x);7.A.构造函数可以是内联函数C.构造函数可以设置默认参数D.构造函数在定义类的对象是自动执行8. 假设BC为一个类,在下面构造函数的原型声明中存在着语法错误的是。
A.BC(int a, int); B.BC(int, int);C.int BC(int a, int b); D.BC(int, int y);9. 类成员的访问权限不包括。
A.public B.protected C.private D.friend10. 下列关于类和对象的描述中不正确的是。
A.一个对象只能属于一个类B.对象是类的一个实例C.一个类只能有一个对象D.类和对象的关系与数据类型和变量的关系类似。
11. 若有如下类声明“class A{int a;};”,则AA.public数据成员B.public成员函数D.private成员函数12. 在类外定义成员函数时,需要在函数名前加上。
C++(面向对象的程序设计)考前必背的名词解释和简答题
C++(面向对象的程序设计)考前必背的名词解释和简答题1. 封装封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。
例如C++中的类,它定义了该集合中每个对象所共有的属性和方法。
2. 继承继承是让某个类型的对象获得另一个类型的对象的特征。
例如:C++中子类对父类的继承,子类具有父类的特性,同时还可以拥有自己的新特性。
3. 多态多态是指不同类型的对象接收相同的消息时产生不同的行为。
多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减小代码的复杂度。
例如函数的重载。
4. 什么是this 指针?为什么要用this 指针?this 指针是类中的一个特殊指针,当类实例化时,this 指针指向对象自己;而在类的声明时,指向类本身。
通过它不仅可以提升成员函数操作的效率,而且能简化运算符重载代码。
5. 叙述公有、私有、保护成员在类中、类外和对象中的访问权限。
类中的关键字public, private, protected 声明了类中的成员与类外之间的关系,称为访问权限。
对于public 成员来说,他们是公有的,可以在类外和对象中访问。
对于private 成员来说,他们是私有的,不能在类外和对象中访问,数据成员只能由类中的函数使用,成员函数只允许在类中调用。
对于protected 成员来说,他们是受保护的,具有半公开性质,可以在类中与子类中访问。
6. 构造函数和析构函数的作用是什么?构造函数的功能是在创建对象时,给数据成员赋初值,即给对象初始化。
析构函数的功能是释放一个对象,在对象删除前,用来做一些内存释放等清理工作。
7. 什么是类的继承和派生?继承是指一个事物可以继承其父辈全部或部分的特性,同时本身还有自己的特性。
当一个新类从一个已定义的类中派生后,新类不仅继承了原有类的属性和方法,并且还拥有自己新的属性和方法,称为类的继承和派生。
8. 派生类public 继承方式有那些特点?(1)在派生类中,基类的公有成员、保护成员和私有成员的访问属性保持不变。
C++_谭浩强_总复习试卷
{
A a;
a.setx(10); a.sety(5);
cout<<a.getx()<<’\t’<<gety()<<endl;
cout<<a.f1()<<’\t’<<a.f2()<<endl;
习题一
一、填空题
1、面向对象的程序设计有四大特点,它们是抽象、封装、( 继承 )、( 多态 )。
2、类中的成员使用特定的关键字指定不同的访问特性,其中(公用)成员是提供给外部的接口,在类中和类外可见。
A. 类是一种类型,它封装了数据和操作
B. 对象是类的实例
C. 一个类的对象只有一个
D. 一个对象必属于某个类
9、在类定义的外部,可以被访问的成员有( C )。
A. 所有类成员
B. private或protected的类成员
C. public的类成员
D. public或private的类成员
8、若类X中没有定义拷贝构造函数,则系统为类X定义的默认拷贝构造函数的原型为( X::X(X &x); )。
9、类中的成员只能为该类的成员函数及该类的派生类中的成员函数访问,则应加上访问属性( protected )。
10、假设一个类对象数组为a[m],其中m为常变量,当离开它的作用域时,系统自动调用该类析构函数的次数为( m )。
3、protected成员的访问权限:派生类( 能 )访问protected成员,派生类对象( 不能 )访问protected成员,本类的对象( 不能 )访问protected成员(填:能与不能)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前面我们在定义类时多次使用到了public 关键字,表示类的成员具有“公开”的访问权限,这节我们就来详细讲解。
C++通过public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。
所谓访问权限,就是你能不能使用该类中的成员。
Java、C# 程序员注意,C++ 中的public、private、protected 只能修
饰类的成员,不能修饰类,C++中的类没有共有私有之分。
在类的内部(定义类的代码内部),无论成员被声明为public、protected 还是private,都是可以互相访问的,没有访问权限的限制。
在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问public 属性的成员,不能访问 private、protected 属性的成员。
本节重点讲解public 和private,protected 将在继承中讲解。
下面通过一个Student 类来演示成员的访问权限:
1.#include<iostream>
ing namespace std;
3.
4.//类的声明
5.class Student{
6.private://私有的
7.char*m_name;
8.int m_age;
9.float m_score;
10.
11.public://共有的
12.void setname(char*name);
13.void setage(int age);
14.void setscore(float score);
15.void show();
16.};
17.
18.//成员函数的定义
19.void Student::setname(char*name){
20.m_name = name;
21.}
22.void Student::setage(int age){
23.m_age = age;
24.}
25.void Student::setscore(float score){
26.m_score = score;
27.}
28.void Student::show(){
29.cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
30.}
31.
32.int main(){
33.//在栈上创建对象
34.Student stu;
35.stu.setname("小明");
36.stu.setage(15);
37.stu.setscore(92.5f);
38.stu.show();
39.
40.//在堆上创建对象
41.Student *pstu =new Student;
42.pstu ->setname("李华");
43.pstu ->setage(16);
44.pstu ->setscore(96);
45.pstu ->show();
46.
47.return0;
48.}
运行结果:
小明的年龄是15,成绩是92.5
李华的年龄是16,成绩是96
类的声明和成员函数的定义都是类定义的一部分,在实际开发中,我们通常将类的声明放在头文件中,而将成员函数的定义放在源文件中。
类中的成员变量m_name、m_age 和m_ score 被设置成private 属性,在类的外部不能通过对象访问。
也就是说,私有成员变量和成员函数只能在类内部使用,在类外都是无效的。
成员函数setname()、setage() 和setscore() 被设置为public 属性,是公有的,可以通过对象访问。
private 后面的成员都是私有的,直到有public 出现才会变成共有的;public 之后再无其他限定符,所以public 后面的成员都是共有的。
一眼看出这是成员变量,又可以和成员函数中的形参名字区分开。
因为三个成员变量都是私有的,不能通过对象直接访问,所以必须借助三个public 属性的成员函数来修改它们的值。
下面的代码是错误的:
1.Student stu;
2.//m_name、m_age、m_score 是私有成员变量,不能在类外部通过对象访问
3.stu.m_name ="小明";
4.stu.m_age =15;
5.stu.m_score =92.5f;
6.stu.show();
简单地谈类的封装
private 关键字的作用在于更好地隐藏类的内部实现,该向外暴露的接口(能通过对象访问的成员)都声明为public,不希望外部知道、或者只在类内部使用的、或者对外部没有影响的成员,都建议声明为private。
根据C++软件设计规范,实际项目开发中的成员变量以及只在类内部使用的成员函数(只被成员函数调用的成员函数)都建议声明为private,而只将允许通过对象调用的成员函数声明为public。
另外还有一个关键字protected,声明为protected 的成员在类外也不
能通过对象访问,但是在它的派生类内部可以访问,这点我们将在后续章
节中介绍,现在你只需要知道protected 属性的成员在类外无法访问即
可。
有读者可能会提出疑问,将成员变量都声明为private,如何给它们赋值呢,又如何读取它们的值呢?
我们可以额外添加两个public 属性的成员函数,一个用来设置成员变量的值,一个用来修改成员变量的值。
上面的代码中,setname()、setage()、setscore() 函数就用来设置成员变量的值;如果希望获取成员变量的值,可以再添加三个函数getname()、getage()、getscore()。
量的名字。
除了set 函数和get 函数,在创建对象时还可以调用构造函数来初始化各个成员变量,我们将在《C++构造函数》一节中展开讨论。
不过构造函数只能给成员变量赋值一次,以后再修改还得借助set 函数。
这种将成员变量声明为private、将部分成员函数声明为public 的做法体现了类的封装性。
所谓封装,是指尽量隐藏类的内部实现,只向用户提供有用的成员函数。
有读者可能会说,额外添加set 函数和get 函数多麻烦,直接将成员变量设置为public
多省事!确实,这样做99.9% 的情况下都不是一种错误,我也不认为这样做有什么不妥;
但是,将成员变量设置为private 是一种软件设计规范,尤其是在大中型项目中,还是请大家尽量遵守这一原则。
为了减少代码量,方便说明问题,本教程中的类可能会将成员变量设置为
public,请读者不要认为这是一种错误。
对private和public的更多说明
声明为private 的成员和声明为public 的成员的次序任意,既可以先出现private 部分,也可以先出现public 部分。
如果既不写private 也不写public,就默认为private。
在一个类体中,private 和public 可以分别出现多次。
每个部分的有效范围到出现另一个访问限定符或类体结束时(最后一个右花括号)为止。
但是为了使程序清晰,应该养成这样的习惯,使每一种成员访问限定符在类定义体中只出现一次。
下面的类声明也是完全正确的:
纯文本复制
1.class Student{
2.private:
3.char*m_name;
4.private:
5.int m_age;
6.float m_score;
7.public:
8.void setname(char*name);
9.void setage(int age);
10.public:
11.void setscore(float score);
12.void show();
13.};。