日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c/c++整理--c++面向对象(3)

發布時間:2023/12/20 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c/c++整理--c++面向对象(3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、與全局對象相比,使用靜態數據成員有什么優勢

優勢: (1)靜態數據成員沒有進入程序的全局命名空間,因此不存在程序中其他全局命名沖突的可能性。 (2)使用靜態數據成員可以隱藏信息。因為靜態數據成員可以是private成員,而全局對象不能

二、有哪幾種情況只能用intialization list,而不能用assignment

  無論是在構造函數初始化列表中初始化成員,還是在構造函數體中對它們賦值,最終結果都是相同的。不同之處在于,使用構造函數初始化列表初始化數據成員,沒有定義初始化列表的構造函數體中對數據成員賦值。   對于const和reference類型成員變量,它們只能夠被初始化而不能被賦值操作,因此只能使用初始化列表。   還有一種情況就是,類的構造函數需要調用其基類的構造函數的時候。


#include <iostream> using namespace std; class A { //父類 int a; public: A() {}; A(int x):a(x){} //帶參數的構造函數對a的初始化 void printA() { cout<<"a = "<<a<<endl; } }; class B : public A{ int b; public: B(int x, int y) : A(x) //初始化A構造函數 { //a = x; //a為private,B中無法調用 //A(x); //調用方式錯誤 b = y; } void printB() { cout<<"b = "<<b<<endl; } }; int main() { B b(2, 3); b.printA(); //調用子類的printA b.printB(); //調用自己的printB return 0; } 從上面程序中可以看到,如果在子類的構造函數中需要初始化子類的private成員,直接對其賦值是不行的,只有調用父類的構造函數才能完成對它的初始化。但在函數體內調用父類的構造函數也是不合法的,只有采用19行中的初始化列表調用子類的構造函數的方式。 輸出:

三、靜態成員的錯誤使用

#include <iostream> using namespace std; class test { public: static int i; int j; test(int a):i(1), j(a) {} void func1(); static void func2(); }; void test::func1() { cout<<i<<","<<j<<endl; } void test::func2() { cout<<i<<","<<j<<endl; } int main() { test t(2); t.func1(); t.func2(); return 0; }
這個程序有兩個錯誤: (1)代碼第9行不能初始化i (2)代碼第21行,在靜態成員函數中調用了非靜態成員。
改正:
#include <iostream> using namespace std; class test { public: static int i; int j; test(int a):j(a) {} void func1(); static void func2(); }; int test::i = 1; void test::func1() { cout<<i<<","<<j<<endl; } void test::func2() { cout<<i<< /*","<<j<<*/ endl; //注釋對j的調用 } int main() { test t(2); t.func1(); t.func2(); return 0; }

總結

以上是生活随笔為你收集整理的c/c++整理--c++面向对象(3)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。