1. 程式人生 > >面試題-面向物件-面向物件概念

面試題-面向物件-面向物件概念

問題1:
問:說說c++和c的主要區別?
答:
1.C語言屬於面向過程語言,通過函式來實現程式功能。而C++是面向物件語言,主要通過類的形式來實現程式功能。
2.使用C++編寫的面向物件應用程式比C語言編寫的程式更容易維護、擴充套件性更強。
3.C++多用於開發上層的應用軟體,而C語言程式碼體積小、執行效率高,多用於編寫系統軟體和嵌入式開發。
例如:Windows作業系統、Linux作業系統大部分核心都是用C語言編寫的。從名稱上,可以說C++是C語言的超集,它相容C語言,同時擴充了許多內容,例如面向物件、STL模板庫等。總之,C語言屬於面向過程程式語言,側重於函式;而C++屬於面向物件程式語言,側重於類。
---------------------------------------------------------------------------------------------------------------------------------------
問題2:


問:面向物件的程式設計思想是什麼?
答:資料結構和對資料結構進行操作的方法封裝形成一個個的物件。
----------------------------------------------------------------------------------------------------------------------------------------
問題3:

問:面向物件與面向過程分別是什麼?
答:
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候一個一個依次呼叫就可以了;以過程為中心的程式設計思想,以演算法進行驅動。

面向物件是把構成問題事務分解成各個物件

,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。以物件為中心,以訊息進行驅動。
-----------------------------------------------------------------------------------------------------------------------------------------
問題4:
問:面向過程與面向物件的優缺點?
答:
面向過程
  優點:效能比面向物件高,因為類呼叫時需要例項化,開銷比較大,比較消耗資源,比如微控制器、嵌入式開發、Linux/Unix等一般採用面向過程開發,效能是最重要的因素。
  缺點:沒有面向物件易維護、易複用、易擴充套件
面向物件
  優點:易維護、易複用、易擴充套件
,由於面向物件有封裝、繼承、多型性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護
  缺點:效能比面向過程低
-----------------------------------------------------------------------------------------------------------------------------------------
問題5:

問:面向對物件與面向過程的區別?
答:
1.面向過程的思維方式是分析綜合。面向物件的思維方式是構造。

2.面向過程的程式設計有挑戰性,技巧性強。面向物件主要在於物件抽象有技術性,抽象完了後,任何人都可以做後面的工作了。

3.對面向過程而言,資料是獨立的。在面向物件中,物件本身就提供了儲存資料的空間(類的資料成員),這樣就是函式的引數傳遞簡單多了,而且提供了資料封裝後,資料的訪問也變可靠了。
----------------------------------------------------------------------------------------------------------------------------------------
問題6:
問:什麼是物件?
答:物件是指現實世界中各種各樣的實體。它可以指具體的事物也可以指抽象的事物。
-----------------------------------------------------------------------------------------------------------------------------------------
問題7:
問:物件都具有二方面特徵是什麼?分別是什麼含義?
答:物件都具有的特徵是:靜態特徵和動態特徵。
靜態特徵是指能描述物件的一些屬性,動態特徵是指物件表現出來的行為。
----------------------------------------------------------------------------------------------------------------------------------------
問題8:
問:什麼是類?
答:類是一種複雜的資料型別,它是將不同型別的資料和與這些資料相關的操作封裝在一起的集合體。類的基本思想是資料抽象和封裝。資料抽象是一種依賴於介面和實現分離的程式設計(以及設計)技術。類的介面包括使用者所能執行的操作:類的實現則包括類的資料成員、負責介面實現的函式以及定義類所需的各種私有函式。
封裝實現了類的介面和實現的分離。封裝後的類隱藏了它的實現細節,也就是說,類的使用者只能使用介面而無法訪問實現部分。類想要實現資料抽象和封裝,需要首先定義一個抽象資料型別。在抽象資料型別中,由類的設計者負責考慮類的實現過程;(摘自《Primer c++第五版》)

關於介面和實現分離的技術(某網友的部落格文章):https://blog.csdn.net/starlee/article/details/610825
-----------------------------------------------------------------------------------------------------------------
問題9:
問:寫出結構體定義與宣告的幾種形式?

答:

struct為結構體關鍵字,tag為結構體的標誌,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體宣告的變數。

struct tag {
 member-list
 } variable-list ;

在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。以下為示例:

1.//此宣告聲明瞭擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c。同時又聲明瞭結構體變數s1,這個結構體並沒有標明其標籤

struct {
 
    int a;
 
    char b;
 
    double c;
 
} s1;

2.//同上聲明瞭擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c,結構體的標籤被命名為SIMPLE,沒有宣告變數。

struct SIMPLE{
 
    int a;
 
    char b;
 
    double c;
 
};

/用SIMPLE標籤的結構體,另外聲明瞭變數t1、t2、t3
struct SIMPLE t1, t2[20], *t3;

3.

//也可以用typedef建立新型別
typedef struct{
    int a;
    char b;
    double c;
} Simple2;
//現在可以用Simple2作為型別宣告新的結構體變數
Simple2 u1, u2[20], *u3;

4.

//此結構體的宣告包含了其他的結構體
struct COMPLEX{
    char string[100];
    struct SIMPLE a;
};
//此結構體的宣告包含了指向自己型別的指標
struct NODE{
    char string[100];
    struct NODE *next_node;
};

5.struct B;   
//對結構體B進行不完整宣告
//結構體A中包含指向結構體B的指標
struct A{
    struct B *partner;
    //other members;
};
//結構體B中包含指向結構體A的指標,在A宣告完後,B也隨之進行宣告
struct B{
    struct A *partner;
    //other members;};

---------------------------------------------------------------------------------------------------------------------------------------------
問題10:
問:類與結構體的區別是什麼?
答:
1.只有結構體存在於C語言,結構體都存在於c++.

2.在c中結構體只涉及到資料結構,在c++中結構體和類體現了資料結構演算法的結合。也就是說在c++中,結構體還可以包含函式,而c語言中不可以。

3.在c語言中結構體沒有成員函式,可以被宣告為變數、指標和陣列等。在c++中由於對結構體進行了擴充,獲取了很多功能,當然還可以包含函式。

4.訪問機制,結構體預設訪問的機制是public,而預設訪問機制是private

5.從class繼承預設是private繼承,而從struct繼承預設是public繼承。

6.C++的結構體宣告不必有struct關鍵字,而C語言的結構體宣告必須帶有關鍵字(使用typedef別名定義除外)。

7.結構體型別,而引用型別。

8.結構體和類同樣可以能夠繼承和實現多型

9.在c++中,結構體可以繼承同樣也可以繼承結構體,繼承過程中注意訪問許可權。

10.“class”這個關鍵字還用於定義模板引數,就像“typename”。但關鍵字“struct”不用於定義模板引數。這一點在Stanley B.Lippman寫的Inside the C++ Object Model有過說明。

11.struct更適合看成是一個資料結構的實現體,class更適合看成是一個物件的實現體。
12.例項化的類儲存在記憶體的堆內,而結構儲存在棧內,結構的執行效率相對較高。
13.結構體沒有解構函式。
-------------------------------------------------------------------------------------------------------------------------------------------

問題11:

問:哪種使用的情況下適合結構體還是類?

答:
(1) 在表示諸如點、矩形等主要用來儲存資料的輕量級物件時,首選struct。
(2) 在表示資料量大、邏輯複雜的大物件時,首選class。
(3) 在表現抽象和多級別的物件層次時,class是最佳選擇
-------------------------------------------------------------------------------------------------------------------------------------------
問題12:
問:什麼是抽象?
答:抽象的作用就是表示同一類事物的本質。例如在c/c++中,資料型別就是對一批具體的數的抽象。
類是物件的抽象,而物件則是類的特例,或者說是例項。
抽象包括兩個方面:一是過程抽象,二是資料抽象。
--------------------------------------------------------------------------------------------------------------------------------------
問題13:
問:什麼是封裝?
答:封裝是指可以對一個物件進行封裝處理,把它的一部分屬性和功能對外界遮蔽,也就是說從外界是看不到的,甚至是不可見的。
封裝的特點:
1.將有關的資料和操作程式碼封裝在一個物件中,形成一個基本單位,各個物件之間相對獨立,互不干擾。
2.將物件中某些部分對外隱蔽,只留下少數介面,以便與外界聯絡,接收外界的訊息。這種對外界遮蔽的做法稱為訊息遮蔽。
--------------------------------------------------------------------------------------------------------------------
問題14:
問:繼承的作用?
答:採用繼承的方法可以很方便地利用一個已有的類建立一個新的類,這就可以重用已有軟體中的一部分甚至大部分,節省了程式設計工作量。
--------------------------------------------------------------------------------------------------------------------
問題15:
問:類的特性?

答:封裝(維護性),繼承(複用性)和多型(擴充套件性)。抽象,不屬於類的特性,特點是靈活性。
--------------------------------------------------------------------------------------------------------------------
問題16:
問:抽象類是什麼?作用是什麼?

答:抽象類是一種特殊的類,它是為了抽象和設計的目的為建立的,它處於繼承層次結構的較上層。
(1)抽象類的定義:稱帶有純虛擬函式的類為抽象類。
(2)抽象類的作用:
抽象類的主要作用是將有關的操作作為結果介面組織在一個繼承層次結構中,由它來為派生類提供一個公共的根,派生類將具體實現在其基類中作為介面的操作。所以派生類實際上刻畫了一組子類的操作介面的通用語義,這些語義也傳給子類,子類可以具體實現這些語義,也可以再將這些語義傳給自己的子類。
(3)使用抽象類時注意:
•   抽象類只能作為基類來使用,其純虛擬函式的實現由派生類給出。如果派生類中沒有重新定義純虛擬函式,而只是繼承基類的純虛擬函式,則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛擬函式的實現,則該派生類就不再是抽象類了,它是一個可以建立物件的具體的類。
•   抽象類是不能定義物件的。
--------------------------------------------------------------------------------------------------------------------
問題17:
問:什麼是介面類?特點是什麼?
答:
介面類就是隻提供介面不提供實現的類,就是介面類,介面類和抽象類對C++而言,沒有什麼區別。
介面類有如下特點:
1.子類來實現介面類中沒有實現的所有介面。
2.介面方法前面有virtual關鍵詞修飾,並且等於0。
3.只能被繼承,不能獨自生成物件。
--------------------------------------------------------------------------------------------------------------------
問題18:
問:什麼是友元類?
答:
類可以允許其他類或者函式訪問它的非公有成員,方法是令其他類或者函式成為它的友元(friend)。如果類想把一個函式作為它的友元,只需要增加一條以friend關鍵字開始的函式宣告語句即可。
--------------------------------------------------------------------------------------------------------------------
問題19:
問:多重繼承與多繼承的區別?

答:多繼承是指一個子類繼承多個父類。多繼承對父類的個數沒有限制,繼承方式可以是公共繼承、保護繼承和私有繼承。
多重繼承特點總結如下:
(1)多重繼承與多繼承不同,當B類從A類派生,C類從B類派生,此時稱為多重繼承

(1)當例項化子類時,會首先依次呼叫所有基類的建構函式,最後呼叫該子類的建構函式;銷燬該子類時,則相反,先呼叫該子類的解構函式,再依次呼叫所有基類的解構函式。

(2)無論繼承的層級有多少層,只要它們保持著直接或間接的繼承關係,那麼子類都可以與其直接父類或間接父類構成 is a的關係,並且能夠通過父類的指標對直接子類或間接子類進行相應的操作,子類物件可以給直接父類或間接父類的物件或引用賦值或初始化。
--------------------------------------------------------------------------------------------------------------------
問題20:
問:在標頭檔案中進行類的宣告,在對應的實現檔案中進行類的定義有什麼意義?
答:
這樣可以提高編譯效率。因為這樣不僅檔案的程式碼設計方便,而且只需要編譯一次就能夠生成.obj檔案。再次應用該類的地方,就不會重新編譯了。

-------------------------------------------------------------------------------------------------------------------

問題21:
問:如何定義兩個類互為成員的情況?以下程式碼正確嗎?

class A
{
public:
 
private:
 B m_B;
};
class B
{
private:
A m_A;
};

答:不正確。因為在類A之前,沒有發現類B的定義,直接使用了類B,但是卻沒有發現類B的定義,而只是發現了類B的宣告。修改程式碼為:

classB;

class A
{
public:
 
private:
 B *m_B;//或者B m_B();
};
class B
{
private:
A m_A;
};
分析:
本題筆者認為主要考點是類的定義與宣告的區別。
B m_B只是類B的宣告,而 B *m_B;//或者B m_B();是類B的定義。
當我們new出一個物件(即B *m_B),就會自動呼叫建構函式完成初始化,也就完成了類的定義。
當我們B m_B()時,由於m_B()意思是呼叫了類B預設的建構函式,完成類的定義。
類的定義與類的宣告區別就在於定義時是自動呼叫了建構函式,因此才真正建立一個物件m_B,而宣告並沒有呼叫建構函式,所以也沒有建立物件,只是宣告而已。

---------------------------------------------------------------------------------------------------

問題22:
問:成員變數有哪些訪問方式(或者訪問控制方式)?
答:
成員變數根據訪問許可權有private、protect和public 3種訪問方式。
--------------------------------------------------------------------------
問題23:
問:C++中的private的成員變數可以由哪些函式訪問?
答:
private只能由本類中的成員函式或者友元函式來訪問。

相關推薦

[C/C++常見筆試試題] 程式設計基礎 - 面向物件相關、虛擬函式、程式設計技巧篇

13 面向物件相關 面向物件思想是程式設計歷史上一次偉大的創新,面向物件的提出極大地提高了程式設計的效率,為程式設計的重用性奠定了堅實的基礎,面向物件思想已經廣泛應用在現今主流的程式語言中,如C++、Java、C#等。   13.1 面向物件與面向過程有什麼區別? 面向物件 面向物件是把資

經典試題--FizzBuzz的面向物件版本

題目描述,給一個數n(n>1)。從1~n-1,列印該數字,並且,如果該數字能被3整除,列印Fizz;如果能被5整除,列印Buzz,如果能被15整除,列印FizzBuzz。 傳統的寫法一般是一個for迴圈裡面巢狀4個if else判斷。能寫到這個水平算是合格了。但使用

.net必問的試題系列之面向物件

上個月離職了,這幾天整理了一些常見的面試題,整理成一個系列給大家分享一下,機會是給有準備的人,面試造火箭,工作擰螺絲,不慌,共勉。 1.net必問的面試題系列之基本概念和語法 2.net必問的面試題系列之面向物件 3.net必問的面試題系列之設計模式 4.net必問的面試題系列之集合、異常、泛型 5.net必

試題:判斷一個物件是不是陣列型別

<script> //判斷一個物件是不是陣列型別 typeof不能檢視所有型別 var obj1={x:1,y:2}, obj2=[1,2,3], obj3=new Date(); //1.判斷爹(原型物件)

試題-如何判斷一個物件是不是陣列型別

在前端面試中,我們經常會被問道,如何判斷一個物件是不是陣列型別,下面就這一點展開詳細的描述,並總結一下共有幾種方法。 1.我們首先回顧一下typeof操作符的用法 操作符可以用來檢測給定變數的資料型別,返回的值有以下幾種:undefined,boolean,string,number,object,f

試題)兩個物件值相同 (x.equals(y) == true) ,但卻可有不同的 hash code ,這 句話對不對

(面試題)兩個物件值相同 (x.equals(y) == true) ,但卻可有不同的 hash code ,這 句話對不對 答:不對,有相同的 hash code 這是java語言的定義: 物件相等則hashCode一定相等; hashCode相等物件未必相等

試題:Java中物件序列化介面(Serializable)的意義

Serializable介面是一個裡面什麼都沒有的介面 它的原始碼是public interface Serializable{},即什麼都沒有。 如果一個接口裡面什麼內容都沒有,那麼這個介面是一個標識介面,比如,一個學生遇到一個問題,排錯排了幾天也沒解決,此時,她舉手了(示意我去幫他解決),然後我過去,幫他

騰訊試題-----JavaScript中arguments物件解析

在騰訊面試中遇到了這樣問題: js程式碼 function test(x,y){ var x = 10; alert(arguments[0],arguments[1]); } test(); 獲取arguments資料 Array.p

Java試題面向物件,類載入器,JDBC, Spring 基礎概念

    1. 為什麼說Java是一門平臺無關語言? 平臺無關實際的含義是“一次編寫到處執行”。Java 能夠做到是因為它的位元組碼(byte code)可以執行在任何作業系統上,與底層系統無關。 2. 為什麼 Java 不是100%面向物件? Java

試題-面向物件-面向物件概念

問題1:問:說說c++和c的主要區別?答:1.C語言屬於面向過程語言,通過函式來實現程式功能。而C++是面向物件語言,主要通過類的形式來實現程式功能。2.使用C++編寫的面向物件應用程式比C語言編寫的程式更容易維護、擴充套件性更強。3.C++多用於開發上層的應用軟體,而C

試題12——面向物件的三大特性

面向物件的三大特徵:封裝性,繼承性,多型性 (1)封裝性:將客觀事物抽象成類,每個類對自身的資料和方法實行保護(protected,private,public) (2)繼承性: 廣義的繼承有三種實現形式: a,實現繼承(使用基類的屬性和方法而無需額外編碼的能力) b,可視繼承(子窗體使用父

試題-面向物件-靜態成員變數以及靜態成員函式

問題1:問:在類中,靜態資料成員和普通資料成員有何區別? 答: 1.普通資料成員屬於類的物件,物件被建立後,普通資料成員才會分配記憶體。靜態資料成員屬於整個類,即使沒有建立物件,它也存在。 2.只能

每週 10 道 Java 試題 : 面向物件, 類載入器, JDBC, Spring

1. 為什麼說Java是一門平臺無關語言? 平臺無關實際的含義是“一次編寫到處執行”。Java 能夠做到是因為它的位元組碼(byte code)可以執行在任何作業系統上,與底層系統無關。 2. 為什麼 Java 不是100%面向物件? Java 不是100%面向物件,因為它包含8個原始資料型別,

攜程架構師講解試題:基礎卻又沒多少人做對的面向物件試題

一、題目 public class Base { private String baseName = "base"; public Base() { callName(); } public void callName() { System. out. println(b

面向物件_匿名內部類的試題

/* 按照要求,補齊程式碼 interface Inter{ void sho(); } class Outer{ //補齊程式碼 } class Out

《java入門第一季》之面向物件匿名內部類試題

面試題一: /*         按照要求,補齊程式碼             interface Inter { void show(); }             class Outer { /

JAVA試題2:什麼是面向物件

面向物件是一種思想,世間萬物都可以看做一個物件,這裡只討論面向物件程式設計(OOP),Java是一個支援併發、基於類和麵向物件的計算機程式語言,面向物件軟體開發的優點: 程式碼開發模組化,更易維護和修改; 程式碼複用性強; 增強程式碼的可靠性和靈活性; 增加程式碼的可讀性。 面向物件的四大基本特

試題1 什麼是面向物件

1,如何理解面向物件? (1)面向物件的特點 它是一種思想,它可以使複雜的問題簡單化, 它可以實現角色轉變,是我們從執行者轉變為指揮者 (2)舉例說明(結合實際場景,遇到什麼場景就舉什麼例子) 例子1: 現在這場面試其實就是在運用面向物件的思想在解決問題,公司老闆招聘員工代

面向物件_兩個試題

1:方法重寫和方法過載的區別?方法過載能改變返回值型別嗎? 方法重寫: 在子類中,出現和父類中一模一樣的方法宣告的現象。 方法過載: 同一個類中,出現方法名相同,引數列表不同的現像 方

Java 面向物件 試題

1、封裝具有的特性? 答:(1)在類的定義中設定訪問物件屬性(資料成員)及方法(成員方法)的許可權,限制本類物件及其他類的物件使用的範圍。 (2)提供一個介面來描述其他物件的使用方法 (3)其他物件不能直接修改本物件所擁有的屬性和方法 (4)封裝反映了事物的相對獨立性  (