鱼C论坛

 找回密码
 立即注册
查看: 2683|回复: 9

[技术交流] C++快速入门 课件源码讨论之静态属性和静态方法

[复制链接]
发表于 2015-1-21 16:26:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <iostream>
  2. #include <string>
  3. class Pet
  4. {
  5. public:
  6.         Pet(std::string theName);
  7.         ~Pet();
  8.         static int getCount();
  9. protected:
  10.         std::string name;
  11. private:
  12.         static int count;
  13. };
  14. class Dog : public Pet
  15. {
  16. public:
  17.         Dog (std::string theName);
  18. };
  19. class Cat: public Pet
  20. {
  21. public:
  22.         Cat(std::string theName);
  23. };
  24. int Pet::count = 0;

  25. Pet::Pet(std::string theName)
  26. {
  27.         name = theName;
  28.         count++;
  29.         std::cout << "一只宠物出生了,名字叫做:" << name << "\n";
  30. }

  31. Pet::~Pet()
  32. {
  33.         count--;
  34.         std::cout << name << "挂掉了\n";
  35. }
  36. int Pet::getCount()
  37. {
  38.         return count;
  39. }
  40. Dog::Dog(std::string theName) :Pet(theName)
  41. {
  42.         std::cout << this<< std::endl;
  43. }
  44. Cat::Cat(std::string theName) : Pet(theName)
  45. {

  46. }
  47. int main()
  48. {
  49.        
  50.                 Dog dog("Tom");
  51.             Cat cat("Jerry");
  52.                 std::cout << &dog;
  53.                 std::cout << "\n已经诞生了" << Pet::getCount() << "只宠物!\n";
  54.        
  55.        
  56.                 Dog dog2("TT");
  57.                 Cat cat2("JJ");
  58.                 std::cout << "\n现在呢 ,已经诞生了" << Pet::getCount() << "只宠物!\n";
  59.        
  60.         std::cout << "\n现在还剩下" << Pet::getCount() << "只宠物!\n";
  61.         return 0;
  62. }
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
康小泡 + 5 + 5 + 2 支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-21 16:29:16 | 显示全部楼层
  1. #include <iostream>
  2. #include <string>
  3. class BaseClass
  4. {
  5. public:
  6.         BaseClass();
  7.         ~BaseClass();
  8.         void doSomething();
  9. };
  10. class SubClass :public BaseClass
  11. {
  12. public:
  13.         SubClass();
  14.         ~SubClass();
  15. };
  16. BaseClass::BaseClass()
  17. {
  18.         std::cout << "进入基类构造器\n";
  19.         std::cout << "基类构造器\n";
  20. }

  21. BaseClass::~BaseClass()
  22. {
  23.         std::cout << "进入基类析构器\n";
  24.         std::cout << "基类析构器\n";
  25. }

  26. void BaseClass::doSomething()
  27. {
  28.         std::cout << "我在吃东西\n";
  29. }


  30. SubClass::SubClass()
  31. {
  32.         std::cout << "进入子类构造器\n";
  33.         std::cout << "子类构造器\n";
  34. }

  35. SubClass::~SubClass()
  36. {
  37.         std::cout << "进入子类析构器\n";
  38.         std::cout << "子类析构器\n";
  39. }
  40. int main()
  41. {
  42.         SubClass subclass;
  43.         subclass.doSomething();
  44.         std::cout << "完事!\n";
  45.        
  46.         system("pause");
  47.         return 0;
  48. }
复制代码
继承机制中的构造器和析构器

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
康小泡 + 5 + 5 + 2 支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-21 19:09:35 | 显示全部楼层
简单说一下我的理解吧
本来觉得已经理解了,可是仅仅换了一个名字就白痴了。。。。
在类继承里面是这样的
  1. #include <iostream>
  2. #include <string>
  3. class animal
  4. {
  5. public:
  6.         std::string mouth;
  7.         void eat();
  8.         void sleep();
  9.         void drool();
  10. };
  11. class pig:public animal
  12. {
  13. public:
  14.         void climb();
  15.         void eat();
  16. };
  17. class turtle :public animal
  18. {
  19. public:
  20.         void swim();
  21. };
  22. void animal::eat()
  23. {
  24.         std::cout << "I'm eattimg!" << std::endl;
  25. }
  26. void animal::sleep()
  27. {
  28.         std::cout << "I'm sleeping!" <<std:: endl;
  29. }
  30. void animal::drool()
  31. {
  32.         std::cout << "I'm drooling" << std::endl;
  33. }
  34. void pig::eat()
  35. {
  36.         std::cout << "吃了你!" << std::endl;
  37. }
  38. void pig :: climb()
  39. {
  40.         std::cout << "I'm climbing" << std::endl;
  41. }
  42. void turtle::swim()
  43. {
  44.         std::cout<<"I'm swimming"<< std::endl;
  45. }
  46. int main()
  47. {
  48.         pig a;
  49.         turtle b;
  50.         a.eat();//在调用的时候会调用void pig::eat()方法,而void animal::eat()会被前者覆盖
  51.         a.mouth = "chang";
  52.         b.mouth = "bian";
  53.         a.climb();
  54.         a.drool();
  55.         a.sleep();
  56.         b.swim();
  57.         b.drool();
  58.         b.sleep();
  59.         std::cout<<a.mouth<<std::endl;
  60.         std::cout<<b.mouth<<std::endl;
  61.         system("pause");
  62. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-21 19:20:25 | 显示全部楼层
  1. #include <iostream>
  2. #include <string>
  3. class Pet
  4. {
  5. public:
  6.         Pet(std::string theName);
  7.         void eat();
  8.         void sleep();
  9.         virtual  void play();<font style=""><font size="5"><font style="background-color: black;"><font color="cyan">//<strong>需要注意的是虚方法的使用</strong></font></font></font></font>
  10. protected:
  11.         std::string name;
  12. private:

  13. };
  14. class Cat :public Pet
  15. {
  16. public:
  17.         Cat(std::string theName);
  18.         void climb();
  19.         void play();
  20. private:

  21. };
  22. class Dog :public Pet
  23. {
  24. public:
  25.         Dog(std::string theName);
  26.         void bark();
  27.         void play();
  28. private:

  29. };
  30. Pet::Pet(std::string theName)
  31. {
  32.         name = theName;
  33. }
  34. void Pet::eat()
  35. {
  36.         std::cout << name << "正在吃东西!\n";
  37. }
  38. void Pet::sleep()
  39. {
  40.         std::cout << name << "正在睡大觉!\n";
  41. }
  42. void Pet::play()
  43. {
  44.         std::cout << name << "正在玩游戏!\n";
  45. }
  46. Cat::Cat(std::string theName) :Pet(theName)
  47. {
  48. }
  49. void Cat::climb()
  50. {
  51.         std::cout << name << "正在爬树!\n";
  52. }
  53. void Cat::play()
  54. {
  55.         std::cout << name << "正在玩毛毛球!\n";
  56. }
  57. Dog::Dog(std::string theName) :Pet(theName)
  58. {
  59. }
  60. void Dog::bark()
  61. {
  62.         std::cout << name << "汪汪汪汪!\n";
  63. }
  64. void Dog::play()
  65. {
  66.         std::cout << name << "正在追赶那只该死的猫!\n";
  67. }
  68. int main()
  69. {
  70.         Pet *cat = new Cat("加菲猫");
  71.         Pet *dog = new Dog("欧迪");
  72.         cat->sleep();
  73.         cat->eat();  <strong><font color="cyan" style="background-color: black;">//这里如果是用Cat cc;  cc.eat();结果是什么呢?自己改一下就知道了<img alt="" src="http://bbs.fishc.com/static/image/smiley/lovely/20080925104601644.gif" border="0" smilieid="105"></font></strong>
  74.         cat->play();
  75.         dog->sleep();
  76.         dog->eat();
  77.         Dog dd("bb");
  78.         dd.bark();
  79.         dog->play();
  80.         delete cat;
  81.         delete dog;
  82.         return 0;
  83. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-21 19:23:03 | 显示全部楼层
这段代码是我自己在网上搜索的
给大家做个参考
  1. #include <iostream>
  2. using namespace std;
  3. class Complex
  4. {
  5.         public:
  6.            Complex() { real = 0; imag = 0; }
  7.            Complex(double r, double i) { real = r; imag = i; }
  8.            operator double() { return real; } //类型转换函数
  9.         private :
  10.            double real;
  11.            double imag;
  12. };

  13. int main()
  14. {
  15.            Complex c1(3, 4), c2(5, -10), c3;
  16.            double d;
  17.            d = 2.5 + c1;//要求将一个double数据与Complex类数据相加
  18.            cout << d << endl;
  19.            return 0;
  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-21 19:24:42 | 显示全部楼层
shaoguanfa 发表于 2015-1-21 19:23
这段代码是我自己在网上搜索的
给大家做个参考

是不是跟你想象的有点不一样?我也很疑惑呢,

operator double() { return real; } //类型转换函数
d = 2.5 + c1;//要求将一个double数据与Complex类数据相加

还没理解。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-21 19:34:07 | 显示全部楼层
  1. #include <iostream>
  2. using namespace std;
  3. void main()
  4. {
  5.         cout<<"第一章"<<endl;
  6.         cout<<" ";
  7.         cout.setf(ios::left);//设置对齐方式为left
  8.         cout.width(7);//设置宽度为7,不足用空格填充
  9.         cout<<"1.1";
  10.         cout<<"什么是C语言";
  11.         cout.unsetf(ios::left); //取消对齐方式,用缺省right方式
  12.         cout.fill('.'); //设置填充方式
  13.         cout.width(30); //设置宽度,只对下条输出有用
  14.         cout<<1<<endl;
  15.         cout<<" ";
  16.         cout.width(7); //设置宽度
  17.         cout.setf(ios::left); //设置对齐方式为left
  18.         cout.fill(' '); //设置填充,缺省为空格
  19.         cout<<"1.11";
  20.         cout<<"C语言的历史";
  21.         cout.unsetf(ios::left); //取消对齐方式
  22.         cout.fill('.');
  23.         cout.width(30);
  24.         cout<<58<<endl;
  25.         cout.fill(' ');
  26.         cout<<"第二章"<<endl;
  27. }
复制代码

这是一段控制格式输出的代码  感觉还不错  输出结果如下
QQ截图20150121193112.png

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-21 19:39:00 | 显示全部楼层
这是文件写入并读取的代码,希望对初学者有点帮助

  1. <p> <div class="blockcode"><blockquote>#include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5. int main()
  6. {
  7.         string s;
  8.         cout << "请输入要写入的内容:" << endl;
  9.         getline(cin, s);
  10.         fstream p("a.txt", ios::in | ios::out|ios::app );
  11.         p << s << endl;
  12.         cout << "读取的内容是:" << endl;
  13.         static char line[222];
  14.         p.seekg(ios::beg);
  15.         while (!p.eof())
  16.         {
  17.                 p.getline(line,222);
  18.                 cout << line<<endl ;
  19.         }
  20.         p.close();
  21.         system("pause");
  22.         return 0;
  23.        
  24. }
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-21 21:10:01 | 显示全部楼层
多继承与虚继承
  1. #include <iostream>
  2. #include <string>
  3. class Person
  4. {
  5. public:
  6.         Person(std::string theName);
  7.         void introduce();
  8. protected:
  9.         std::string name;
  10. };
  11. class Teacher :virtual public Person
  12. {
  13. public:
  14.         Teacher(std::string theName, std::string theClass);
  15.         void teach();
  16.         void introduce();
  17. protected:
  18.         std::string classes;
  19. };
  20. class Student :virtual public Person
  21. {
  22. public:
  23.         Student(std::string theName, std::string theClass);
  24.         void attendClass();
  25.         void introduce();
  26. protected:
  27.         std::string classes;
  28. };
  29. class TeachingStudent :public Student, public Teacher
  30. {
  31. public:
  32.         TeachingStudent(std::string theName, std::string classTeaching, std::string classAttending);
  33.         void introduce();
  34. };
  35. Person::Person(std::string theName)
  36. {
  37.         name = theName;
  38. }
  39. void Person::introduce()
  40. {
  41.         std::cout << "大家好,我是" << name << "。\n";
  42. }
  43. Teacher::Teacher(std::string theName, std::string theClass) :Person(theName)
  44. {
  45.         classes = theClass;
  46. }
  47. void Teacher::teach()
  48. {
  49.         std::cout << name << "教" << classes << "。\n";
  50. }
  51. void Teacher::introduce()
  52. {
  53.         std::cout << "大家好,我是" << name << ",我教" << classes << "。\n";
  54. }
  55. Student::Student(std::string theName, std::string theClass) :Person(theName)
  56. {
  57.         classes = theClass;
  58. }
  59. void Student::attendClass()
  60. {
  61.         std::cout << name << "加入" << classes << "学习。\n";
  62. }
  63. void Student::introduce()
  64. {
  65.         std::cout << "大家好,我是" << name << ",我在" << classes << "学习。\n";
  66. }
  67. TeachingStudent::TeachingStudent(std::string theName,
  68.         std::string classTeaching, std::string classAttending) :Teacher(theName, classTeaching), Student(theName, classAttending),Person(theName)
  69. {

  70. }
  71. void TeachingStudent::introduce()
  72. {
  73.         std::cout << "大家好,我是" << name << "。我教" << Teacher::classes << ","<<"同时,我在"<<Student::classes<<"学习。\n";
  74. }
  75. int main()
  76. {
  77.         Teacher teacher("天天", "初级语言");
  78.         Student student("小白", "初级语言");
  79.         TeachingStudent teachingstudent("飞鱼", "初级语言", "高级语言");
  80.         teacher.introduce();
  81.         teacher.teach();
  82.         student.introduce();
  83.         student.attendClass();
  84.         teachingstudent.introduce();
  85.         teachingstudent.teach();
  86.         teachingstudent.attendClass();
  87.         return 0;
  88. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 09:23:52 | 显示全部楼层
学习下c++,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-18 22:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表